2017-09-05 93 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