Quelle est la meilleure façon d'utiliser LEFT OUTER JOIN pour vérifier l'inexistence de lignes associées
De L'Utilisation De MySQL 5.x je veux efficacement sélectionnez toutes les lignes de la table X, où il est aucune ligne dans la table Y satisfaisant à certaines conditions, par exemple
Me donner tous les enregistrements de X où connexes, Y avec les foo = bar n'existe PAS
SELECT count(id) FROM X
LEFT OUTER JOIN Y ON y.X_id = X.id AND y.foo = 'bar'
WHERE y....?
Ce que je comprends, une jointure externe gauche est garanti pour produire une ligne pour chaque ligne de la gauche (le premier) table -- X dans ce cas, si oui ou non une bonne ligne dans la table jointe a été trouvé. Ce que je veux faire est alors de sélectionner uniquement les lignes où aucune ligne n'a été trouvé.
Il me semble que y'.X_id doit être NULL si il n'y a pas d'enregistrement correspondant, mais ce test ne semble pas fonctionner. Ni y.X_id = 0 ou !y.X_id.
Modifications: correction de l'erreur de transcription (pas QUE) qui a été souligné par plusieurs réponses. Fixe l'erreur grammaticale.
source d'informationauteur podperson | 2011-05-04
Vous devez vous connecter pour publier un commentaire.
Proximité.
D'abord faire la jointure comme d'habitude, puis sélectionnez toutes les lignes pour lesquelles une
not null
ligne dans Y est en faitnull
donc vous êtes sûrs qu'il y a un "non match" et pas seulement unenull
valeur de Y.Note également de la faute de frappe (corrigé depuis) vous faites dans la requête:
De vérifier si la clé primaire de la table Y est NULLE ferait l'affaire, qui raconte la jointure n'a pas de correspondance :
Johan réponse est correcte à 100%.
En plus de cela, il y a aussi cette option:
En fonction de votre taille de la table et la distribution de données, ce qui peut être plus efficace. Tester et garder les deux façons de référence pour l'avenir.
Pourquoi utiliser une jointure externe?
Ne pourriez-vous faire:
Vous devez vous rappeler que NULL de la valeur particulière! Et c'est pourquoi je la doc de mysql que Vous avez un chapitre intitulé "4.3.4.6 de Travail avec des Valeurs NULL".
lien:
https://dev.mysql.com/doc/refman/5.7/en/working-with-null.html
profitez-en!