Mysql
選擇表中不存在的行
我有兩張表學生表和費用表:
第一桌(學生):
二表(費用):
我想從費用表中獲取那些未支付金額的學生的行。在上面的範例中,想要獲取 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 個變體具有大致相同的有效性(取決於數據統計和索引的存在,有時這些查詢甚至可能產生相同的執行計劃)。最後一個變體幾乎總是效率最低。