sql >> Base de Datos >  >> RDS >> Mysql

Encuentra registros de una tabla que no existen en otra

Hay varias formas diferentes de hacer esto, con eficiencia variable, dependiendo de qué tan bueno sea su optimizador de consultas y el tamaño relativo de sus dos tablas:

Esta es la declaración más corta y puede ser más rápida si su directorio telefónico es muy corto:

SELECT  *
FROM    Call
WHERE   phone_number NOT IN (SELECT phone_number FROM Phone_book)

alternativamente (gracias a Alterlife )

SELECT *
FROM   Call
WHERE  NOT EXISTS
  (SELECT *
   FROM   Phone_book
   WHERE  Phone_book.phone_number = Call.phone_number)

o (gracias a WOPR)

SELECT * 
FROM   Call
LEFT OUTER JOIN Phone_Book
  ON (Call.phone_number = Phone_book.phone_number)
  WHERE Phone_book.phone_number IS NULL

(ignorando que, como han dicho otros, normalmente es mejor seleccionar solo las columnas que desea, no '* ')