sql >> Databáze >  >> RDS >> Mysql

Najděte záznamy z jedné tabulky, které v jiné neexistují

Existuje několik různých způsobů, jak toho dosáhnout, s různou účinností v závislosti na tom, jak dobrý je váš optimalizátor dotazů a na relativní velikosti vašich dvou tabulek:

Toto je nejkratší výpis a může být nejrychlejší, pokud je váš telefonní seznam velmi krátký:

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

alternativně (díky Alterlife )

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

nebo (díky WOPR)

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

(ignorujte, že, jak řekli jiní, je obvykle nejlepší vybrat pouze požadované sloupce, nikoli '* ')



  1. Co jsou Oracle Joins (Sql Joins)?

  2. Najděte řádky, kde textové pole obsahuje hodnotu podobnou vstupu

  3. Jak zkrátit tabulku s omezením cizího klíče?

  4. Co je DTU v Azure SQL Database a jak zjistit, kolik potřebujeme