11
votes

Comparez deux tables SQL et retournez des identifiants manquants?

J'ai deux tables simples: (seulement la colonne "Id")

Table1: P>

id
2
4


3 commentaires

Jusqu'à présent, toutes les réponses ne montrent que ce qui est dans le tableau 1 manquant dans le tableau2. Avez-vous besoin d'une requête qui reviendrait à tous ceux du tableau2 qui manquent également dans la colonne1?


Salut Paul, non - une façon seulement est ce dont j'ai besoin.


Le mot clé est sauf . MySQL ne prend pas en charge cette opération, mais l'utiliser dans des recherches reviendra de nombreux résultats pour des quinzins de travail et des approches supplémentaires. (Cette question se présente de temps en temps.)


3 Réponses :


38
votes

Il existe plusieurs façons de cuire ce chat: xxx

ou vous pouvez utiliser une jointure extérieure gauche: xxx


1 commentaires

Je vous suggérerais que vous utilisiez des préfixes de nom de table dans la première requête pour clarifier le champ ID que vous entendez, si ce n'est que pour la raison pour laquelle il serait très déroutant de lire si vous l'étendez plus tard.



2
votes
select t1.*
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where t2.id is null

1 commentaires

@Raihan parce que l'extérieur gauche peut rejoindre "Aucune lignée" de T2 pour un T1 donné (et c'est le LynchPin pour cette approche). Les lignes manquantes sont de telles lignes qui sont ... manquantes :-)



1
votes

Essayez ceci:

SELECT    table1.id
FROM      table1
WHERE     table1.id NOT IN(SELECT table2.id FROM table2)


0 commentaires