从 table 插入,其中 SEQ_NUM <> 2

Insert from tempt table where SEQ_NUM <> 2

我正在尝试从临时 table 中的数据在下面 table PS_VNDR_ADDR_SCROL 中插入,其中 table 中还没有一行插入的 PS_VNDR_ADDR_SCROL 具有 SEQ_NUM 等于 2 相同的 VENDOR_ID

下面的SQL运行但没有插入任何行,我知道应该有132条记录满足这个条件。

INSERT PS_VNDR_ADDR_SCROL 
SELECT 'SHARE', A.VENDOR_ID, 2, 'HOME', 'BUSN', ''
FROM #DepWork2 A
WHERE NOT EXISTS (
    SELECT VENDOR_ID 
    FROM PS_VNDR_ADDR_SCROL B 
    WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM <> 2
)

我也使用 NOT IN 进行了如下尝试,但出现语法错误:

INSERT PS_VNDR_ADDR_SCROL 
SELECT 'SHARE', A.VENDOR_ID, 2, 'HOME', 'BUSN', ''
FROM #DepWork2 A
WHERE NOT IN (
    SELECT VENDOR_ID 
    FROM PS_VNDR_ADDR_SCROL B 
    WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM <> 2
)

尝试使用 exists

INSERT PS_VNDR_ADDR_SCROL 
SELECT 'SHARE', A.VENDOR_ID, 2, 'HOME', 'BUSN', ''
FROM #DepWork2 A
WHERE  EXISTS (SELECT 1  FROM PS_VNDR_ADDR_SCROL B  WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM = 2)

insert in the below table PS_VNDR_ADDR_SCROL [...] where there is not already a row in the table [...] PS_VNDR_ADDR_SCROL that has a SEQ_NUM equal to 2 for the same VENDOR_ID

您使用 NOT EXISTS 的方法看起来不错,但我认为,为了符合您的规范,相关子查询应该拼写为:

SELECT VENDOR_ID 
FROM PS_VNDR_ADDR_SCROL B 
WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM = 2

而不是:

SELECT VENDOR_ID 
FROM PS_VNDR_ADDR_SCROL B 
WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM <> 2

因此,尝试:

INSERT PS_VNDR_ADDR_SCROL 
SELECT 
    'SHARE', 
    A.VENDOR_ID, 
    2, 
    'HOME', 
    'BUSN', 
    ''
FROM #DepWork2 A
WHERE NOT EXISTS (
    SELECT 1 
    FROM PS_VNDR_ADDR_SCROL B 
    WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM = 2
)

注意:第二个查询中的语法错误来自 SQL 代码的这一部分:

...
WHERE NOT IN (
    SELECT VENDOR_ID 
    ...
)

您需要在NOT IN条件的左侧指定一列。这可能应该是:

...
WHERE A.VENDOR_ID NOT IN (
    SELECT VENDOR_ID 
    ...
)

注意:当然,第二个查询也应该在相关子查询中有条件SEQ_NUM = 2而不是SEQ_NUM <> 2