插入语句,其中condition抛出错误

时间:2016-07-02 21:15:39

标签: sql oracle syntax-error sql-insert

以下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命令未正确结束。 请帮忙纠正查询

2 个答案:

答案 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 existsnot in,因为它们处理NULL的不同之处。如果子查询甚至选择一个NOT IN值,NULL将永远不会返回true。