SQL高效JOIN

时间:2014-01-26 08:20:23

标签: sql tsql sql-server-2008-r2

这是一个我几天都在挣扎的问题......

让我们假设我有一个表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

2 个答案:

答案 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