如何设置多个AND条件?恩.
SELECT *
FROM CONFIRMED
WHERE NOT EXISTS
(
SELECT *
FROM Import_Orders
WHERE Import_Orders.Customer = CONFIRMED.Customer
AND Import_Orders.Reference = CONFIRMED.Reference
AND Import_Orders.[Index] = CONFIRMED.[Index]
AND Import_Orders.QuantityToDeliver = CONFIRMED.QuantityToDeliver
AND Import_Orders.DateToDeliver = CONFIRMED.DateToDeliver
);
Run Code Online (Sandbox Code Playgroud)
我知道这可以在我的表上使用一个WHERE&AND条件而不是几个.
我需要两个表的结果,其中上述条件不匹配.我在两个表中没有相同的键.现在有了这段代码,我得到了表CONFIRMED中的所有结果.
以下是多个表的语法:
WHERE NOT EXISTS (...) AND NOT EXISTS (...) AND NOT EXISTS (...)
Run Code Online (Sandbox Code Playgroud)
但是,如果数据库太大而无法关注性能,那么在以下几行中您需要一个不那么明显的语法:
LEFT JOIN Some_Table t ON (t.xxx = Main_Table.xxx)
LEFT JOIN Another_Table t2 ON (t2.xxx = Main_Table.xxx)
LEFT JOIN Yet_Another_Table t3 ON (t3.xxx = Main_Table.xxx)
...
WHERE t.id IS NULL AND t2.id IS NULL AND t3.id IS NULL
Run Code Online (Sandbox Code Playgroud)
对于一个表和一个组合条件,如问题中的SQL示例:
LEFT JOIN Some_Table t ON
t.xxx = Main_Table.xxx
AND t.yyy = Main_Table.yyy
AND t.zzz = Main_Table.zzz
WHERE t.id IS NULL
Run Code Online (Sandbox Code Playgroud)
这应该返回Main_Table中存在但在Some_Table中没有匹配行的行,假设列xxx等不可为空.
例如,如果可以xxx为空,那么您需要进一步修改查询:
LEFT JOIN Some_Table t ON
(t.xxx = Main_Table.xxx OR (t.xxx IS NULL AND Main_Table.xxx IS NULL))
AND t.yyy = Main_Table.yyy
AND t.zzz = Main_Table.zzz
WHERE t.id IS NULL
Run Code Online (Sandbox Code Playgroud)