以下SQL语句在Oracle中引发错误:
INSERT INTO TABLE1 (ACCT_NB, ACCT_TYPE, TOKEN_ID)
SELECT ACCT_NB, 'A', ID FROM TABLE2
WHERE NOT IN (SELECT ACCT_NB FROM TABLE1
WHERE ACCT_TYPE='A' AND TABLE1.ACCT_NB=TABLE2.ACCT_NB)
SQL命令未正确结束。 请帮忙纠正查询
答案 0 :(得分:4)
您错过了not in
运算符的左侧。我认为它应该是ACCT_NB
:
INSERT INTO TABLE1 (ACCT_NB, ACCT_TYPE, TOKEN_ID)
SELECT ACCT_NB, 'A', ID
FROM TABLE2
WHERE ACCT_NB NOT IN (SELECT ACCT_NB
FROM TABLE1
WHERE ACCT_TYPE='A' AND TABLE1.ACCT_NB=TABLE2.ACCT_NB)
答案 1 :(得分:3)
使用not exists
:
INSERT INTO TABLE1(ACCT_NB, ACCT_TYPE, TOKEN_ID)
SELECT ACCT_NB, 'A', ID
FROM TABLE2
WHERE NOT EXISTS (SELECT 1
FROM TABLE1
WHERE ACCT_TYPE = 'A' AND TABLE1.ACCT_NB = TABLE2.ACCT_NB
);
我更喜欢not exists
到not in
,因为它们处理NULL
的不同之处。如果子查询甚至选择一个NOT IN
值,NULL
将永远不会返回true。