2009-04-07 10 views
6

He intentado un montón de cosas diferentes, pero siempre obtengo errores de sintaxis.¿Cómo obtengo todas las filas en una tabla que no están en otra en MS Access?

Tengo dos tablas: tableA y tableB. Ambos tienen un campo con_number como ID único. Quiero seleccionar todas las filas en la tabla B que no existen en la tabla A.

¿Alguien puede por favor darme esta consulta como lo sería en MS Access?

Sé que el uso de NOT IN es bastante ineficiente en este caso, así que si hay una mejor manera, entonces sería genial.

Gracias.

Respuesta

17
SELECT TableB.con_number 
FROM TableB 
WHERE NOT EXISTS (SELECT 1 
        FROM TableA 
        WHERE TableA.con_number = TableB.con_number); 
+0

Me pegó. ;-) +1 – Tomalak

+0

Batirme también ;-) Puedes aumentar la legibilidad de tu publicación al sangrar cada línea por 4 espacios (resaltarla y presionar el botón de muestra del código para que esto sea así) – Smashery

+0

-1, pidió una versión sin "No estar en" –

2
NO

en la versión (lento pero seguro):

SELECT con_number 
FROM TableB 
WHERE con_number NOT IN (SELECT con_number FROM tableA); 

versión experimental (no sé si esto es más rápido, simplemente probarlo):

SELECT B.con_number, MAX(A.con_number) AS check 
FROM tableB B LEFT JOIN tableA A ON B.con_number = A.con_number 
GROUP BY B.con_number 
HAVING check IS NULL; 

Nota : Ambos deberían ser bastante estándar SQL, no conozco ninguna característica específica de acceso a ms

0

Recuerdo algo como este:

SELECT * FROM TableA.* LEFT JOIN TableB _ 
    ON TableA.con_number = TableB.con_number WHERE 'criteria' 

Pero no me acuerdo cuales 'criterios' para utilizar

... TableA.con_number <> TableB.con_Number 
... TableB.con_number IS NULL 
... TableA.con_number NOT like TableB.con_Number 
1

No es un hallazgo asistente sin igual que lo configuran. El SQL es:

SELECT TableB.con_number 
FROM TableB LEFT JOIN TableA 
ON TableB.con_number = TableA.con_number 
WHERE TableA.con_number Is Null 
Cuestiones relacionadas