2016-07-04 96 views
1

表:service_providersSQL查询连接表

id name 
----------- 
    1 A 
    2 B 
    3 C 
    4 D 

service_providers映射

id service_receiver_id service_provider_id 
--------------------------------------------------- 
1   1      2 
2   4      1 

我如何写一个SQL查询来检索service_provider_id = 1,在上面映射表关联?

我需要的结果是这样的:

id associated_with 
--------------------- 
1   2 
1   4 
+1

你能解释一下你想要什么,目前还不清楚你想加入哪个表? – user3378165

回答

1

你所有的结果似乎来自于第二个表,所以你甚至不需要联接:

SELECT service_receiver_id AS associated_with 
FROM mytable 
WHERE service_provider_id = 1 
UNION ALL 
SELECT service_provider_id AS associated_with 
FROM mytable 
WHERE service_receiver_id = 1 
0
SELECT DISTINCT 
    CASE 
     WHEN r.service_provider_id <> 1 THEN r.service_provider_id 
     ELSE r.service_reciever_id 
    END as associated_with 
FROM 
    Relationships r 
WHERE 
    r.service_provider_id = 1 
    OR r.service_reciever_id = 1 

@ Mureinik是正确的,你不需要连接,但提供另一个不需要联合的解决方案,你总是可以在where子句中使用case语句和OR。

能服务提供商也可以是接收器永远不会消失?或者如果存在重复记录,则可能需要考虑DISTINCT以消除可能的情况。