編輯
我不是問如何編寫好的查詢,但這3個查詢返回相同的結果。結合INNER JOIN和LEFT JOIN
查詢1
SELECT v1.id
FROM (
SELECT DISTINCT t1.id
FROM t1 LEFT JOIN t2 ON t1.id = t2.id
WHERE t2.id IS NULL
) v1 INNER JOIN (
SELECT DISTINCT t3.id
FROM t3 LEFT JOIN t4 ON t3.id = t4.id
WHERE t4.id IS NULL
) v2 ON v1.id = v2.id;
查詢2
SELECT DISTINCT t1.id
FROM (t1 LEFT JOIN t2 ON t1.id = t2.id)
INNER JOIN (t3 LEFT JOIN t4 ON t3.id = t4.id) ON t1.id = t3.id
WHERE t2.id IS NULL AND t4.id IS NULL;
查詢3
SELECT DISTINCT t1.id
FROM t1 LEFT JOIN t2 ON t1.id = t2.id
INNER JOIN t3 ON t1.id = t3.id LEFT JOIN t4 ON t3.id = t4.id
WHERE t2.id IS NULL AND t4.id IS NULL;
查詢是不硬由程序員編碼,但由用戶輸入動態生成。
例如,當用戶插入find id in t1 (but not in t2) and in t3 (but not in t4)
時,他的縮進是Query 1
。但目前我的程序生成Query 3
,它看起來像確定。我想知道這個查詢在某些情況下有bug,所以應該改爲Query 2
或1
。
用戶輸入(如上所示)僅僅是一個例子,最終我很難將用戶輸入轉換爲JOIN語句。
謝謝先進。
關於修改/澄清的問題:如果表中有相同id值的倍數,我相信* Query 3 *將產生與* Query 1 *不同的結果。 – Turophile 2014-09-19 05:41:12
@嗜熱者哎呀。它是*錯字*。固定。謝謝。 – 2014-09-19 06:09:31
問題到底是什麼?是這樣的:**「我想知道這個查詢在某些情況下有bug」**你有任何失敗測試用例嗎? – 2014-09-19 10:05:48