2016-03-15 89 views
1

這是我的代碼如下。如何連接兩個匹配唯一列ID的表?

select cserv.cust_id,serv.service_id,serv.service_name,cserv.cust_id,cserv.channel_id,cserv2.cust_id,cserv2.channel_id 
from services as serv 
left join cust_services as cserv on serv.channel_a=cserv.channel_id 
left join cust_services as cserv2 on serv.channel_b=cserv2.channel_id 
where cserv.cust_id IS NOT NULL 
order by cserv.cust_id 

以下是我的結果圖片,它由此查詢生成。

enter image description here

以下是問題的圖像。問題用紅色標記。

enter image description here

我想刪除突出顯示的記錄。我怎樣才能做到這一點?請幫幫我。

下面是我的服務表和cust_service表的圖片。

服務表: -

enter image description here

cust_service: -

enter image description here

+0

請澄清你想從結果中刪除行嗎?你想要:cserv.cust_id = cserv2.cust_id? – Ingaz

+0

是的。多數民衆贊成在 – ShanWave007

回答

0

我已經與自己的數據集測試這一點,它的出現提供你正在尋找的輸出:

SELECT MIN(cserv.cust_id) AS cust_id1 
     ,MIN(serv.service_id) AS service_id 
     ,serv.service_name 
     ,MIN(cserv.cust_id) AS cust_id2 
     ,MIN(cserv.channel_id) AS channel_id 
     ,cserv2.cust_id 
     ,cserv2.channel_id 
FROM services as serv 
    LEFT JOIN cust_services AS cserv ON serv.channel_a=cserv.channel_id 
    LEFT JOIN cust_services AS cserv2 ON serv.channel_b=cserv2.channel_id 
WHERE cserv.cust_id IS NOT NULL 
GROUP BY serv.service_name 
     ,cserv2.cust_id 
     ,cserv2.channel_id 
ORDER BY cust_id1, service_id 

這裏是OP的sqlfiddle我與各自的輸出答案:http://sqlfiddle.com/#!9/74bc16/2

注意,我改變了cust_id字段的名字,因爲他們引起現場不明確的錯誤,因爲他們都命名爲同樣的事情。現在它們被標記爲cust_id1cust_id2,因此您可以按順序排序。我還在ORDER BY子句中添加了service_id,以便保留原始示例中的順序;你可以選擇以其他方式訂購。

+0

我正在做一個示例數據集與您的示例現在要測試。給我幾分鐘... – sadmicrowave

+0

我測試了這個,它似乎工作。讓我知道它是否有幫助,並可用於您的實施。如果它不起作用,我們可以使用另一種解決方案。 – sadmicrowave

相關問題