我有三张桌子。
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
可以具有多个secondaryloc
。我尝试过尽可能好地格式化此问题,但如果出现奇怪现象,请原谅我在格式化方面的经验。我也尽力想出一个合适的通用题名,但除了给出的题名外别无其他。如果您有想法,请告诉我。我正在使用SQL Server 2000。
最佳答案
给定您的样本数据,这应该可以工作:
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
关于sql - 如何将UNION语句转换为JOIN语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51313028/