table1 (id, nom)
table2 (id, nom)
Requete:
SELECT name
FROM table2
-- that are not in table1 already
la source
table1 (id, nom)
table2 (id, nom)
Requete:
SELECT name
FROM table2
-- that are not in table1 already
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
Q : Que se passe-t-il ici?
R : Conceptuellement, nous sélectionnons toutes les lignes table1
et pour chaque ligne, nous essayons de trouver une ligne table2
avec la même valeur pour la name
colonne. S'il n'y a pas une telle ligne, nous laissons simplement la table2
partie de notre résultat vide pour cette ligne. Ensuite, nous contraignons notre sélection en ne sélectionnant que les lignes du résultat où la ligne correspondante n'existe pas. Enfin, nous ignorons tous les champs de notre résultat, à l'exception de la name
colonne (celle dont nous sommes sûrs qu'elle existe table1
).
Bien que ce ne soit pas la méthode la plus performante possible dans tous les cas, elle devrait fonctionner dans pratiquement tous les moteurs de base de données qui tentent d'implémenter ANSI 92 SQL
Vous pouvez soit faire
ou
Voir cette question pour 3 techniques pour accomplir cela
la source
Je n'ai pas assez de points de rep pour voter sur la 2e réponse. Mais je ne suis pas d'accord avec les commentaires sur la première réponse. La deuxième réponse:
Est FAR plus efficace dans la pratique. Je ne sais pas pourquoi, mais je le lance contre 800k + records et la différence est énorme avec l'avantage donné à la 2ème réponse affichée ci-dessus. Juste mon 0,02 $
la source
Il s'agit d'une pure théorie des ensembles que vous pouvez réaliser avec l'
minus
opération.la source
https://www.cloudways.com/blog/how-to-join-two-tables-mysql/
la source
Attention aux pièges. Si le champ
Name
enTable1
contient des valeurs NULL vous de surprises. Mieux vaut:la source
Voici ce qui a fonctionné le mieux pour moi.
C'était plus de deux fois plus rapide que toute autre méthode que j'ai essayée.
la source
Vous pouvez les utiliser
EXCEPT
en mssql ouMINUS
en oracle, ils sont identiques selon:http://blog.sqlauthority.com/2008/08/07/sql-server-except-clause-in-sql-server-is-similar-to-minus-clause-in-oracle/
la source
Ce travail est net pour moi
la source
Voir requête:
Conceptuellement, ce serait: récupérer les enregistrements correspondants dans la sous-requête, puis dans la requête principale, récupérer les enregistrements qui ne sont pas dans la sous-requête.
la source
Je vais republier (car je ne suis pas encore assez cool pour commenter) dans la bonne réponse ... au cas où quelqu'un d'autre aurait pensé qu'il fallait mieux l'expliquer.
Et j'ai vu la syntaxe dans FROM nécessitant des virgules entre les noms de table dans mySQL mais dans sqlLite, il semblait préférer l'espace.
En fin de compte, lorsque vous utilisez des noms de variable incorrects, cela laisse des questions. Mes variables devraient avoir plus de sens. Et quelqu'un devrait expliquer pourquoi nous avons besoin d'une virgule ou pas de virgule.
la source
Si vous souhaitez sélectionner un utilisateur spécifique
La
tent_npk
est une clé primaire d'un utilisateurla source