SQL - find records from one table which don't exist in another

后端 未结 8 872
生来不讨喜
生来不讨喜 2020-11-21 22:44

I\'ve got the following two SQL tables (in MySQL):

Phone_book
+----+------+--------------+
| id | name | phone_number |
+----+------+--------------+
| 1  | J         


        
8条回答
  •  遇见更好的自我
    2020-11-21 22:58

    There's several different ways of doing this, with varying efficiency, depending on how good your query optimiser is, and the relative size of your two tables:

    This is the shortest statement, and may be quickest if your phone book is very short:

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

    alternatively (thanks to Alterlife)

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

    or (thanks to WOPR)

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

    (ignoring that, as others have said, it's normally best to select just the columns you want, not '*')

提交回复
热议问题