2017-09-05 2 views
-1

J'essaie d'exécuter une requête qui montre tous les membres d'un client qui n'appartiennent pas à l'un de leurs groupes. Je compare deux tables qui ont un CustomerID commun et en utilisant leur id de membre pour montrer quels membres ne sont pas dans la deuxième table, CustomerGroupMember.Comparaison de deux tables dans MySQL basé sur un ID commun

Voici un exemple des deux tables.

Membre client

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

Groupe clientele

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

Ci-dessous est ma requête qui ne semble pas produire aucun résultat. Je voudrais que tous ceux qui ne figurent pas dans cette table de membres du groupe client soient édités. Dans les exemples de tableau ci-dessus je vois une sortie des membres 123 et 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

changer essentiellement OÙ ET et modifier un des ANDs à l'endroit où. Pour plus d'aide, voir [Pourquoi devrais-je fournir un MCVE pour ce qui me semble être une requête SQL très simple] (http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an- mcve-for-what-semble-to-me-to-be-very-simple-sql-query) – Strawberry

+0

ouais s'il vous plaît nous montrer quelques exemples de données, la sortie que vous aimeriez voir. ce serait génial si vous ajoutez MCVE (créez des instructions de table avec des exemples de données). vous savez de quoi vous parlez, mais nous ne le savons pas. – EoinS

Répondre

1

Avec la deuxième condition (CustomerGroupMember.CustomerID = '1234') vous convertissez votre LEFT JOIN à un INNER JOIN. Toutes les lignes qui ont des valeurs NULL dans les colonnes CustomerGroupMember seront filtrées, car NULL ne peut pas être égal à '1234'. Vous devez déplacer cette condition dans la clause 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

Merci beaucoup! Cela a bien fonctionné. – Blunick