Mysql

選擇表中不存在的行

  • July 26, 2022

我有兩張表學生表和費用表:

第一桌(學生):

二表(費用):

我想從費用表中獲取那些未支付金額的學生的行。在上面的範例中,想要獲取 std_id 3,5 和 6 的名稱。

常見的反半連接。

任何一個

SELECT *
FROM table1
LEFT JOIN table2 USING (std_id)
WHERE t2.std_id IS NULL

或者

SELECT *
FROM table1
WHERE NOT EXISTS ( SELECT NULL
                  FROM table2
                  WHERE table1.std_id = table2.std_id )

或者

SELECT *
FROM table1
WHERE std_id NOT IN ( SELECT std_id 
                     FROM table2 )

前 2 個變體具有大致相同的有效性(取決於數據統計和索引的存在,有時這些查詢甚至可能產生相同的執行計劃)。最後一個變體幾乎總是效率最低。

引用自:https://dba.stackexchange.com/questions/314843