Je pense que je vais dans le bon sens avec celui-ci ... Veuillez rester avec moi car mon SQL n'est pas le meilleur
J'essaie d'interroger une base de données pour tout sélectionner dans une table où certaines cellules n'existent pas dans une autre. Cela n'a pas beaucoup de sens mais j'espère que ce morceau de code
SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)
Donc, fondamentalement, j'ai un tableau avec une liste d'employés et leurs coordonnées. Puis un autre tableau avec quelques autres détails, y compris leur nom. Là où il n'y a pas de nom dans la table eotm_dyn, ce qui signifie qu'il n'y a pas d'entrée pour eux, je voudrais voir exactement qui ils sont, ou en d'autres termes, voir ce qui manque exactement.
La requête ci-dessus ne renvoie rien, mais je sais qu'il manque 20 noms, donc je n'ai évidemment pas bien compris.
Quelqu'un peut-il aider?
group by X having exist [row with employeeID = e.id]
OU
OU
la source
NOT IN
ne fonctionne pas comme prévu siname
a desnull
valeurs. Regardez à partir de 36min 20sec dans la vidéo SESSION: 10 techniques de réglage des requêtes que chaque programmeur SQL devrait connaître (Kevin Kline, Aaron Bertrand) .Vous pouvez effectuer une jointure à gauche et affirmer que la colonne jointe est NULL.
Exemple:
la source
Ne renvoie jamais aucun enregistrement à moins qu'il ne
eotm_dyn
soit vide. Vous avez besoin d'une sorte de critères surSELECT name FROM eotm_dyn
commeen supposant que les deux tables sont liées par une relation de clé étrangère. À ce stade, vous pouvez utiliser une variété d'autres options, y compris une jointure à gauche. L'optimiseur les traitera généralement de la même manière dans la plupart des cas, cependant.
la source
Vous pouvez également jeter un œil à cette question connexe . Cet utilisateur a signalé que l'utilisation d'une jointure offrait de meilleures performances que l'utilisation d'une sous-requête.
la source