2014-07-08 3 views
0

Vous vous demandez si quelqu'un pourrait expliquer pourquoi ma requête ne donne pas le résultat souhaité dans SQLiteLEFT JOIN échec de requête

J'ai deux tables

Le tableau A contient de nombreuses lignes avec une colonne appelée picklist_id dans laquelle la valeur est répété, j'essaie d'obtenir la valeur distincte de ceux-ci et ensuite vérifier pour voir si cette liste de choix existe dans le tableau deux. C'est ce que j'ai mais je reçois un résultat vide

SELECT distinct(pt.picklist_id) from picklisttable pt LEFT JOIN pickingtable p on 
pt.picklist_id = p.picklist_id where p.picklist_id = null 

Quelqu'un pourrait-il me diriger dans la bonne direction? Je veux que le picklist_id de la table soit retourné s'il n'existe pas dans la table b

+0

Vous ne pouvez pas quitter la jointure en utilisant packlist_id, puis lui demander d'être null. – Bob

+0

@GordonLinoff Ma requête originale avait un wrapper distinct autour de pt.picklist_id, je l'ai retiré pour le tester et j'ai oublié de l'ajouter avant de poster ceci, je vais éditer mon q maintenant – dave

+0

@Bob - alors comment me suggérerais-je de le faire? C'est à peu près aussi loin que mes connaissances sql s'étend! – dave

Répondre

2

Cela devrait être IS NULL, NULL = pas.

SELECT pt.picklist_id 
FROM picklisttable pt 
LEFT JOIN pickingtable p on pt.picklist_id = p.picklist_id 
WHERE p.picklist_id = null; 

Lorsque vous demandez de l'existence de données, la clause EXISTS est plus lisible habituellement, ou la clause IN lorsqu'il s'agit d'une seule colonne.

SELECT pt.picklist_id 
FROM picklisttable pt 
WHERE NOT EXISTS (select * from pickingtable p where pt.picklist_id = p.picklist_id); 

ou

SELECT pt.picklist_id 
FROM picklisttable pt 
WHERE pt.picklist_id NOT IN (select p.picklist_id from pickingtable p); 

ou de traiter avec des jeux et utiliser SAUF, que je considère encore plus lisible:

SELECT picklist_id FROM picklisttable 
EXCEPT 
SELECT picklist_id FROM pickingtable; 
1

Essayez ceci. requête identique sauf au lieu de = NULL il est IS NULL

SELECT distinct(pt.picklist_id) from picklisttable pt LEFT JOIN pickingtable p on 
pt.picklist_id = p.picklist_id where p.picklist_id IS null 
+0

Merci, +1 votre réponse mais marquera @thorsten comme correct pour l'exhaustivité et fournissant d'autres options – dave

0

Pour votre clause where, essayez "p.picklist_id est nul" au lieu de "p.picklist_id = null"