2015-09-28 4 views
5

の行を削除存在している場合、私はこのようなクエリがあります。行がTHEN mysqlの

IF EXISTS(SELECT 1 FROM table1 WHERE col1 = ? LIMIT 1) THEN 
DELETE FROM table2 WHERE col2 = ? 
END IF 

をしかし、上記のクエリが動作しない理由を私は知りません。また、これはうまくいきません:

IF EXISTS(SELECT 1 FROM table1 WHERE col1 = ? LIMIT 1) BEGIN 
DELETE FROM table2 WHERE col2 = ? 
END 

私はそこに構文エラーがあります、私はそれを修正することができますか?

+4

MySQLは(一般的に)手続き型プログラミング言語ではありません。プロシージャの外部でIF文を使用することはできません。ドキュメンテーションはこれを述べています。あなたが実際にそれを_read_していたなら、あなたはあなたの質問に対する答えを見つけるかもしれません。あなたが文書を読むことができなかった何らかの理由がありますか? –

+0

うん。したがって、アプリケーションロジックで 'IF'を実行することにかなり悩まされています。 –

+0

@ LightnessRacesinOrbit実際に私は[この回答](http://stackoverflow.com/questions/639854/check-if-a-row-exists-otherwise-insert#639874)を見て、IFを使用することが可能かもしれないと考えましたmysqlで!とにかく大丈夫です。 – Shafizadeh

答えて

8

あなたはこのように、同じ効果を達成するためにDELETEWHERE句に条件を移動することができます:2つの? sが元のクエリに関連して場所を切り替えていることを

DELETE FROM table2 
WHERE col2 = ? 
    AND EXISTS(SELECT 1 FROM table1 WHERE col1 = ? LIMIT 1) 

注意を。

+0

ありがとうございます、あなたのために+1 upvote。 – Shafizadeh

+0

@Sajad私の知る限り、「制限1」のみがMySqlで動作します。 'TOP 1'はSql Server構文です([関連](http://stackoverflow.com/q/5668540/335858))。 – dasblinkenlight

+0

'LIMIT 1 'は不要です。 'EXISTS'のようなことがあります。 –

関連する問題