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 '*
')