这是一个我几天都在挣扎的问题......
让我们假设我有一个表A(让它命名为Offices),其中包含办公室名称,其位置ID(城市)和位置父ID(区域)。 办公室可以与城市或地区相关。
officeID | locationID | parentLocationID
1 207 200
2 421 400
3 300 null
此外,我还有另一个名为USA_Locations的表,其中只包含美国城市的美国位置ID。
locations_ID
400
500
600
现在了解办公室是否位于美国的最佳方式是什么?
我知道我可以检查JOIN,但这似乎非常慢并且性价比很高。
SELECT
*
FROM offices o
LEFT JOIN USA_Locations us ON o.locationId = us.locations_id
OR o.parentLocationId = us.locations_id
还有其他解决方案吗? 提前谢谢。
编辑:
另外(如果它有帮助)我有一个位置表(包含位置名称和locationID的平面列表)
locations_ID | locationName
400 A
401 B
500 C
答案 0 :(得分:0)
如果您只是需要了解我们办事处的位置,那么这应该会更好:
SELECT *
FROM offices o
where exists
(select 1 from USA_Locations us
where us.locations_id = isnull(o.parentLocationId,o.locations_id)
你可能还需要确保你有索引。
答案 1 :(得分:0)
SELECT * FROM offices o
LEFT JOIN USA_Locations us
ON o.parentLocationId = us.locations_id