2017-09-05 3 views
-1

고객 중 그룹에 속하지 않는 모든 멤버를 보여주는 쿼리를 실행하려고합니다. 두 개의 테이블을 공통적 인 CustomerID으로 비교하고 멤버 ID를 사용하여 두 번째 테이블에없는 멤버를 보여줍니다. 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 

다음은 어떤 결과를 생성하지 않는 것 내 쿼리입니다. 고객 그룹 회원 테이블에없는 사람을 출력하고 싶습니다. 테이블의 예에서 나는 당신이 당신의 좌 가입 내부에 가입 변환하는 두 번째 조건 (CustomerGroupMember.CustomerID = '1234')과 회원 (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- 나에게 -a-the-be-a-very-simple-sql-query) – Strawberry

+0

네, 몇 가지 샘플 데이터를보고 싶습니다. MCVE (샘플 데이터로 테이블 문 작성)를 추가하면 정말 멋지게 될 것입니다. 당신은 당신이 말하는 것을 알고 있습니다,하지만 우리는 그렇게하지 않습니다. – EoinS

답변

1

를 볼 것 이상으로. NULL이 '1234'와 같을 수 없으므로 CustomerGroupMember 열에 NULL이있는 모든 행이 필터링됩니다. 당신은 ON 절에 그 조건을 이동해야합니다

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