2013-01-19 55 views
0

我已经通过谷歌搜索,但没有找到我的问题的答案。如果条件在MySQL查询

我试图使用IF在这种方式查询(而不是存储过程):

IF EXISTS (SELECT * FROM TABLE WHERE COLUMN=VALUE) THEN 
DO SOMETHING 
END IF; 

我tryed在MySQL Workbench和没有工作(语法错误)。

任何人都知道是否有可能以这种方式使用IF?

在此先感谢。

+3

你想'DO'什么'SOMETHING'? – eggyal

+0

在这种情况下在INSERT中。 – Valerio

回答

1

这取决于什么东西

如果是UPDATE,DELETE或选择,你可以在where子句中指定的条件。

WHERE IF((SELECT COUNT(*) FROM TABLE WHERE COLUMN=VALUE) > 0, 1, 2) = 1 

对于其他语句(插入,创建等)我不认为这是可能的。

+0

我需要做一个插入,但在此之前,我需要检查是否已经存在与这些值的一行。 – Valerio

+0

@Valerio:那么,如果一个记录已经存在与'COLUMN = VALUE'你不希望执行INSERT?为什么不在'COLUMN'上定义一个'UNIQUE'索引,这会对你实施这样的约束? – eggyal

+0

用于插入,请参阅INSERT ... ON DUPLICATE KEY UPDATE。这是不完全一样的,但也许这是你在找什么 – Dutow

0

在您的评论中,您说“SOMETHING”是INSERT操作。然后你就可以代替:

INSERT INTO tableName 
    (colA, colB, ...) 
VALUES 
    (a, b, ...) ; 

使用:

INSERT INTO tableName 
    (colA, colB, ...) 
SELECT 
    a, b, ... 
FROM 
    dual 
WHERE 
    EXISTS (SELECT * FROM TABLE WHERE COLUMN=VALUE) ; 
+0

不知道这个语法:(。我要试试。谢谢! – Valerio

+0

好吧,我已经尝试过这种语法,我只需要插入,如果记录不alredy存在,所以经过几次测试后,我已经看到这对我来说是正确的语法是:INSERT INTO表名 (可乐,COLB,...) 选择 A,b,... FROM 双 WHERE ** ** NOT EXISTS(SELECT * FROM表WHERE COLUMN = VALUE); – Valerio

+0

谢谢!我在写评论时遇到了一些问题;) – Valerio