Mysql
 sql >> Base de données >  >> RDS >> Mysql

Trouver des enregistrements d'une table qui n'existent pas dans une autre

Il existe plusieurs façons de procéder, avec une efficacité variable, en fonction de la qualité de votre optimiseur de requêtes et de la taille relative de vos deux tables :

Il s'agit de la déclaration la plus courte, et peut-être la plus rapide si votre annuaire téléphonique est très court :

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

alternativement (grâce à Alterlife )

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

ou (grâce à WOPR)

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

(en ignorant que, comme d'autres l'ont dit, il est normalement préférable de sélectionner uniquement les colonnes souhaitées, et non '* ')