表位置如何使用权正确加入
loc_id loc_name hier2 hier3 hier4 hier5 hier6 hier7 hier8 hier9
152675 Castelli 105 109 0 319 14356 152673 152675 0
14356 Rome 105 109 0 319 14356 0 0 0
...
表Lacations参考
oid name loc_id
12 Demo Villa 152675
...
现在我试着输入字符串“种姓”找一些条目的用户搜索:
SELECT geo.loc_id, geo.loc_name AS name
FROM locations AS geo
LEFT JOIN locations AS geoh3 ON geo.hier3 = geoh3.loc_id
LEFT JOIN locations AS geoh4 ON geo.hier4 = geoh4.loc_id
LEFT JOIN locations AS geoh8 ON geo.hier8 = geoh8.loc_id
WHERE geo.loc_name LIKE 'caste%'
GROUP BY geo.loc_name
This works。我得到loc_id 152675
现在我只希望得到那些我们在对象entrys项所以我加入了参考表:
SELECT geo.loc_id, geo.loc_name AS name
FROM locations AS geo
LEFT JOIN locations AS geoh3 ON geo.hier3 = geoh3.loc_id
LEFT JOIN locations AS geoh4 ON geo.hier4 = geoh4.loc_id
LEFT JOIN locations AS geoh8 ON geo.hier8 = geoh8.loc_id
RIGHT JOIN locations_xref AS gx ON geo.loc_id = gx.loc_id
WHERE geo.loc_name LIKE 'caste%'
GROUP BY geo.loc_name
这工作。我再次使用loc_id 152675获取位置条目,因为它们是参考。
问题
现在的 “罗马” 的用户搜索。我没有得到任何条目,因为没有对象直接参考城市“罗马”。现有的对象被引用到罗马的一个区域。
正如您所看到的,分区和城市条目具有层次结构ID,可用于识别正确的结构。我只是不能将它与参考表一起使用,所以我只能得到那些位于“罗马”或罗马一部分区域的物体。
任何帮助,非常感谢!
对不起,如果这是一个愚蠢的问题,但为什么同样的'loc_id'中Location Location表中的'name'与Locations中的'loc_name'不同?他们实际上应该是相同的还是完全正确的,他们是不同的?基本上,我只是不确定我了解参考表的用途。 –
参考表中的“名称”字段是指房地产对象的名称。所以它与地理位置无关。 – Mike
'hier2''' hier9'列提出了一个次优解规格化的表格,使您的查询变得复杂和缓慢。 –