2011-11-03 18 views
8

Tengo dos tablas simples: (aquí sólo la columna "ID")¿Comparar dos tablas SQL y devolver identificadores faltantes?

tabla1:

id 
1 
2 
3 
4 

tabla2:

id 
2 
4 

la consulta SQL debe comparar las dos mesas que faltan " id "en la tabla 2 y regresar: 1,2

¿Alguna idea? :) TY

+0

Hasta ahora, todas las respuestas solo muestran qué identificadores en la tabla 1 faltan en la tabla 2. ¿Tiene alguna necesidad de una consulta que devuelva todos los que están en la tabla 2 que faltan en la columna 1 también? –

+0

hola Paul, de ninguna manera es lo único que necesito. – MilMike

+1

La palabra clave es 'EXCEPT '. MySQL no es compatible con esta operación, pero su uso en las búsquedas arrojará muchos resultados para trabajos y enfoques adicionales. (Esta pregunta aparece de vez en cuando.) –

Respuesta

26

Hay varias maneras de pelar este gato:

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

O usted podría utilizar una combinación externa izquierda:

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

Le sugiero que use los prefijos del nombre de la tabla en la primera consulta para aclarar qué campo de ID quiere decir, aunque solo sea porque sería muy confuso de leer si lo expandió luego. – Polynomial

+0

@Polynomial, acordado y actualizado. –

+1

años atrás. Pero aún así ayuda. Suerte que encontré tu respuesta: 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 Porque IZQUIERDA EXTERIOR puede unir "no filas" de T2 para un T1 dado (y este es el eje de este enfoque). Las filas que faltan son tales filas que ... falta :-) –

+0

¿Por qué el voto a favor? – RedFilter

1

Prueba esto:

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