una tablas tabla seleccionar registros que otra optimizar lentas existan estan datos consultas consultar comparar coincidentes buscar mysql sorting unique database-table

tablas - Mysql: selecciona filas de una tabla que no están en otro



optimizar consultas lentas mysql (8)

¿Cómo seleccionar todas las filas en una tabla que no aparecen en otra?

Tabla 1:

+-----------+----------+------------+ | FirstName | LastName | BirthDate | +-----------+----------+------------+ | Tia | Carrera | 1975-09-18 | | Nikki | Taylor | 1972-03-04 | | Yamila | Diaz | 1972-03-04 | +-----------+----------+------------+

Tabla 2:

+-----------+----------+------------+ | FirstName | LastName | BirthDate | +-----------+----------+------------+ | Tia | Carrera | 1975-09-18 | | Nikki | Taylor | 1972-03-04 | +-----------+----------+------------+

Ejemplo de salida para las filas en la Tabla 1 que no están en la Tabla 2:

+-----------+----------+------------+ | FirstName | LastName | BirthDate | +-----------+----------+------------+ | Yamila | Diaz | 1972-03-04 | +-----------+----------+------------+

Tal vez algo así debería funcionar:

SELECT * FROM Table1 WHERE * NOT IN (SELECT * FROM Table2)


Debe hacer la subselección basada en un nombre de columna, no * .

Por ejemplo, si tuviera un campo de id Común a ambas tablas, podría hacer:

SELECT * FROM Table1 WHERE id NOT IN (SELECT id FROM Table2)

Consulte la sintaxis de subconsulta de MySQL para más ejemplos.


Esto funcionó para mí en Oracle:

SELECT a.* FROM tbl1 a MINUS SELECT b.* FROM tbl2 b;


Prueba esta simple consulta. Funciona perfectamente

select * from Table1 where (FirstName,LastName,BirthDate) not in (select * from Table2);


Si tiene 300 columnas como mencionó en otro comentario y desea comparar todas las columnas (suponiendo que todas las columnas tengan el mismo nombre), puede usar una NATURAL LEFT JOIN para unir implícitamente todos los nombres de columna coincidentes entre las dos tablas para que no tenga que escribir tediosamente todas las condiciones de unión manualmente:

SELECT a.* FROM tbl_1 a NATURAL LEFT JOIN tbl_2 b WHERE b.FirstName IS NULL


Tratar:

SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.FirstName = table2.FirstName and table1.LastName=table2.LastName WHERE table2.BirthDate IS NULL


Un LEFT JOIN estándar podría resolver el problema y, si los campos de join están indexados,
también debería ser más rápido

SELECT * FROM Table1 as t1 LEFT JOIN Table2 as t2 ON t1.FirstName = t2.FirstName AND t1.LastName=t2.LastName WHERE t2.BirthDate Is Null


SELECT * FROM Table1 AS a WHERE NOT EXISTS ( SELECT * FROM Table2 AS b WHERE a.FirstName=b.FirstName AND a.LastName=b.Last_Name )

EXISTS te ayudará ...


SELECT a.* FROM FROM tbl_1 a MINUS SELECT b.* FROM FROM tbl_2 b