2016-06-22 6 views
0

挿入する前に値をチェックする必要があります。しかし何らかの理由で私はそれを理解することはできません。私のコードは次のとおりです。挿入前に確認する

set @accID = (select id from table2); 

IF @accID IS NOT NULL THEN 
    INSERT INTO task 
    (account_id) 
    VALUES (@accID); 
END IF; 

無効なSQL構文エラーを示しているので、上のコードで何が問題になっていますか?

+0

と交換することができる可能性があります。 –

+0

挿入する前に値をチェックする必要はありません – Strawberry

+0

'account_id'を' NOT NULL'に限定することはできますか?これは 'INSERT'に' IGNORE'を置くだけでこのロジックが不要になります。 – nbayly

答えて

1

これですべてが必要です。

IF(@accIDがNULLではありません) タスク (ACCOUNT_ID)INTO INSERTをBEGIN VALUES(@accID) END

0

あなたは少し奇妙INSERT SELECT

INSERT INTO task (account_id) 
SELECT @accID 
FROM DUAL 
WHERE @accID IS NOT NULL 
; 
と同じ効果を得ることができます

DUALは、MySQLに組み込まれた偽のテーブルです。あなたがFROMなしでWHEREを持つことができないので必要です。

DUALに似た構造を持っていないRDBMSを使用している場合、あなたがストアドプロシージャの外のような `IF`を使用することはできません簡単なサブクエリ(SELECT 1) AS dummyTbl

関連する問題