2017-09-05 69 views
-1

我試圖運行一個查詢,顯示不屬於其中一個組的客戶的所有成員。我比較了兩個具有共同的CustomerID的表格,並使用它們的成員標識來顯示哪些成員不在第二個表格CustomerGroupMember中。根據公共ID比較MySQL中的兩個表格

下面是兩個表格的示例。

客戶會員

id | CustomerID | First | Last 
    --------------------------------- 
    123 | 1234  | Jim | Sample 
    129 | 1234  | Julie | Clark 
    137 | 1234  | Jack | Thomas 
    289 | 1234  | Sue | Smith 

客戶羣成員

MemberID | CustomerID | GroupID 
    --------------------------------- 
    129  | 1234  | 19 
    289  | 1234  | 20 

下面是我的查詢這似乎並沒有產生任何結果。我希望它輸出在該客戶組成員表中找不到的人。在該表中實施例上述我會看到部件123的輸出和137

SELECT CustomerMember.* FROM CustomerMember 
LEFT JOIN 
CustomerGroupMember ON CustomerMember.id = CustomerGroupMember.MemberID 
WHERE 
CustomerMember.CustomerID = '1234' AND CustomerGroupMember.CustomerID = '1234' 
AND CustomerGroupMember.MemberID IS NULL 
+1

本質上的變化WHERE到AND和改變與運算的地方之一。如需進一步的幫助,請參閱[我爲什麼應該爲我所認爲的非常簡單的SQL查詢提供一個MCVE](http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an- mcve-for-what-looks-to-what-seems-to-very-simple-sql-query) – Strawberry

+0

是的,請向我們展示一些示例數據,你希望看到的輸出。如果添加MCVE(創建帶有示例數據的表語句),那將會非常棒。你知道你在說什麼,但我們不知道。 – EoinS

回答

1

隨着要轉換的LEFT JOIN爲內連接第二條件(CustomerGroupMember.CustomerID = '1234')。由於NULL不能等於'1234',因此CustomerGroupMember列中的所有具有NULL的行都將被過濾掉。你需要的是狀態轉變到導子句:

SELECT CustomerMember.* FROM CustomerMember 
LEFT JOIN 
CustomerGroupMember 
ON CustomerMember.id = CustomerGroupMember.MemberID 
AND CustomerGroupMember.CustomerID = '1234' 
WHERE 
CustomerMember.CustomerID = '1234' 
AND CustomerGroupMember.MemberID IS NULL; 

http://rextester.com/DLTQ86207

+0

非常感謝!這很好。 – Blunick