什么不存在多个条件

时间:2012-03-22 09:13:03

标签: sql ms-access

如何设置多个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  

);

我知道这可以在我的桌子上使用一个WHERE&和条件但不是几个。

我需要两个表的结果,其中上述条件不匹配。我在两个表中没有相同的键。现在有了这段代码,我得到了表CONFIRMED中的所有结果。

3 个答案:

答案 0 :(得分:5)

以下是多个表的语法:

WHERE NOT EXISTS (...) AND NOT EXISTS (...) AND NOT EXISTS (...)

但是,如果数据库太大而无法关注性能,那么在以下几行中你需要一个不那么明显的语法:

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

对于一个表和一个组合条件,如问题中的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

假设列xxx等不可为空,这应该返回Main_Table中存在但在Some_Table中没有匹配行的行。

例如,如果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

答案 1 :(得分:3)

我猜你在Import_Orders上有一个ID,如果不使用任何在查询上空白的字段名称。你最好使用字段名而不是*。我为Import_Orders添加了一个示例。

SELECT CONFIRMED.*, Import_Orders.ID, Import_Orders.Customer
FROM CONFIRMED 
LEFT JOIN Import_Orders
ON 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  
WHERE Import_Orders.ID Is Null

更多信息

Fundamental Microsoft Jet SQL for Access 2000
Intermediate Microsoft Jet SQL for Access 2000
Advanced Microsoft Jet SQL for Access 2000

答案 2 :(得分:0)

您可以将所有“=”替换为“<>”并且您应该获得所有标准上没有匹配的结果。

SELECT *
FROM CONFIRMED
WHERE 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  

);