我想使用 LEFT OUTER JOIN 到 WHERE EXISTS 創建等效的 MySQL 查詢。我正在關注這個問題:
SQL 概念 LEFT OUTER JOIN 和 WHERE NOT EXISTS 基本相同嗎?
這是原始查詢:
SELECT *
FROM tableA
JOIN tableB ON tableA.tableA_id = tableB.tableB_id
JOIN tableC ON tableC.tableC_id = tableB.tableB_id
WHERE NOT EXISTS (
SELECT 1
FROM tableD
WHERE tableA.employee_id = tableD.employee_id AND tableC.tableC_datum = DATE(tableD.tableD_od_datetime)
)
但是這個查詢回傳不同的值:
SELECT *
FROM tableA
JOIN tableB ON tableA.tableA_id = tableB.tableB_id
JOIN tableC ON tableC.tableC_id = tableB.tableB_id
LEFT OUTER JOIN tableD ON tableA.employee_id = tableD.employee_id AND tableC.tableC_datum = DATE(tableD.tableD_od_datetime)
WHERE tableD.employee_id IS NULL AND DATE(tableD.tableD_od_datetime) IS NULL
請問為什么這兩個輸出不相等?
uj5u.com熱心網友回復:
not exists和left join ... rgt.col is null方法是相同的。然而left join,將包含不需要的表中的列,因此只需具體說明該select子句:
SELECT table_a.*, table_b.*, table_c.*
FROM table_a
JOIN table_b ...
JOIN table_c ...
LEFT JOIN table_d ...
我寧愿*完全避免并明確列出我需要的那些列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/482554.html
上一篇:合并兩個每行多列的熊貓資料框
