2016-07-04 116 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以消除可能的情況。