2011-11-03 14 views
8

Ho due tabelle semplici: (qui solo la colonna "id")Confronta due tabelle SQL e restituisci gli ID mancanti?

Tabella 1:

id 
1 
2 
3 
4 

table2:

id 
2 
4 

la query SQL dovrebbe confrontare le due tabelle mancanti " id "in table2 e return: 1,2

qualche idea? :) TY

+0

Finora, tutte le risposte mostrano solo quali ID in table1 mancano nella tabella2. Avete bisogno di una query che restituisca tutti quelli in table2 che mancano anche in column1? –

+0

ciao Paul, no, solo un modo è quello di cui ho bisogno. – MilMike

+1

La parola chiave è 'EXCEPT'. MySQL non supporta questa operazione, ma usarla nelle ricerche restituirà molti risultati per work-about e approcci aggiuntivi. (Questa domanda viene di volta in volta.) –

risposta

26

Ci sono diversi modi per la pelle questo gatto:

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

Oppure si potrebbe usare un join esterno sinistro:

SELECT   table1.ID 
FROM   table1 
LEFT OUTER JOIN table2 ON table1.ID = table2.ID 
WHERE   table2.ID IS NULL 
+0

Ti suggerirei di utilizzare i prefissi dei nomi delle tabelle nella prima query per chiarire quale campo ID intendi, se non altro per il motivo che sarebbe molto confuso da leggere se lo espandi dopo. – Polynomial

+0

@Polynomial, concordato e aggiornato. –

+1

anni fa. Ma ancora aiuto. Fortunato ho trovato la tua risposta: D thx –

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

@Raihan Poiché il LEFT OUTER può unire "no rows" da T2 per un dato T1 (e questo è il fulcro di questo approccio). Le righe mancanti sono tali file che sono ... mancanti :-) –

+0

Perché il downvote? – RedFilter

1

Prova questa:

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