如何将UNION语句转换为JOIN语句

用户名

我有三张桌子。

Table: Location

  ID   | Name
-------+--------
  1    | Paris
  2    | London
  3    | Sydney

Table: Loc_Map

PrimaryLoc | SecondaryLoc
-----------+-----------
    1      | 3

Table: User

ID  | PrimaryLocID
----+-------------
22  |    1

我想要针对userID:22的输出。

LocationID | LocationName
    1      |    Paris
    3      |    Sydney

请注意,结果包含使用映射表映射的两个位置ID的数据。我已经使用UNION运算符实现了所需的输出,如下所示:

SELECT L.id, L.name 
FROM 
    location L 
    INNER JOIN Loc_Map LM ON L.id = LM.PrimaryLoc
    INNER JOIN User U ON U.PrimaryLocID = LM.loc_id
WHERE U.id = 22

UNION

SELECT L.id, L.name
FROM 
    location L INNER JOIN User U ON L.id = U.PrimaryLocID
WHERE U.id = 22

为了提高性能,我正在尝试将此SQL查询转换为JOIN语句,但不能。一个primaryloc可以有多个secondarylocs。我尝试过尽可能好地格式化此问题,但如果出现奇怪现象,请原谅我在格式化方面的经验。我也尽力想出一个合适的通用问题标题,但是除了给定的问题之外别无他法。如果您有想法,请告诉我。

我正在使用SQL Server 2000。

亚伦·迪茨(Aaron Dietz)

给定您的样本数据,这应该可以工作:

SELECT DISTINCT L.ID LocationID, L.Name LocationName
FROM user u
JOIN loc_map lm ON u.primarylocID = lm.primaryloc
JOIN location l ON l.id = lm.primaryloc 
                OR l.id = lm.secondaryloc
WHERE U.id = 22

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章