2016-07-02 2 views
2

Следующая 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 не закончилась должным образом. Пожалуйста, помогите с исправить запрос

ответ

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) 
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 никогда не вернет true, если подзапрос выбирает одно значение NULL.

+1

Не могли бы вы немного рассказать о том, как «NULL» обрабатывается по-другому? Благодарю. –

Смежные вопросы