SQL Server:多个WHERE NOT EXISTS子句

C1-*_*4MP 1 sql t-sql sql-server not-exists

我在Load_Charges_IMPORT查询中有大约2600行没有插入到Load_Charges查询中.

我试图确保没有添加重复的主键条目.主键在Load_Charges查询中建立为复合键(Charge Description + Charged Amount).Load_Charges_IMPORT查询中未设置任何键,并且正在从Excel文档导入此数据.

你能告诉我我的代码是否有问题,以及0 row(s) affected当我知道有2600多行时我会得到回复的原因Load_Charges_IMPORT.

INSERT INTO Load_Charges
    SELECT *
    FROM Load_Charges_IMPORT
    WHERE 
        NOT EXISTS (SELECT [Load ID]
                    FROM Load_Charges
                    WHERE Load_Charges_IMPORT.[Load ID] = Load_Charges.[Load ID])
        AND NOT EXISTS (SELECT [Charge Description]
                        FROM Load_Charges
                        WHERE Load_Charges_IMPORT.[Charge Description] = Load_Charges.[Charge Description])
        AND NOT EXISTS (SELECT [Charged Amount] 
                        FROM Load_Charges
                        WHERE Load_Charges_IMPORT.[Charged Amount] = Load_Charges.[Charged Amount]);
Run Code Online (Sandbox Code Playgroud)

Lau*_*gil 6

您的EXISTS子句排除任何一个条件为TRUE的所有行,而不是所有条件都为TRUE的行.试试这个:

INSERT INTO Load_Charges

SELECT *

FROM Load_Charges_IMPORT

WHERE NOT EXISTS (
    SELECT * 
    FROM Load_Charges 
    WHERE Load_Charges_IMPORT.[Load ID]=Load_Charges.[Load ID]
    AND Load_Charges_IMPORT.[Charge Description]=Load_Charges.[Charge Description]
    AND Load_Charges_IMPORT.[Charged Amount]=Load_Charges.[Charged Amount]);
Run Code Online (Sandbox Code Playgroud)

  • @LaughingVergil:为什么没有人使用`select 0`或`select'foo'`而不是`select 1`?我更喜欢`select 1/0`来迷惑读者:-) (3认同)