从 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
。
我正在尝试从临时 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 aSEQ_NUM
equal to 2 for the sameVENDOR_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
。