【问题标题】:What is the right syntax of IF statement in MySQL?MySQL中IF语句的正确语法是什么?
【发布时间】:2012-07-11 07:14:57
【问题描述】:

我有一个小而简单的 MySQL 代码。但是每当我运行它时,我都会收到错误 #1064。你能告诉我我的错误是什么吗?

IF ((SELECT COUNT(id) FROM tbl_states) > 0) THEN
    BEGIN
        SELECT * FROM tbl_cities;
    END
END IF

我还使用了一些其他条件,如以下条件,但我再次遇到错误。

IF (1=1) THEN
    BEGIN
        SELECT * FROM tbl_cities;
    END
END IF

我真正想做的是这样的:

IF ((SELECT COUNT(id) FROM tbl_states) > 0) THEN
    BEGIN
        UPDATE ...
    END
ELSE
    BEGIN
        INSERT ...
    END
END IF

【问题讨论】:

  • 您是在编写查询还是程序?这真的不是一回事。
  • 您在这里的实际目标是什么?如果 tbl_states 表不包含 id 字段具有非空值的记录,您是否真的想在不同的表上执行 INSERT?因为这就是您的代码所暗示的。或者,进行一个逻辑飞跃,您是否真的尝试更新具有指定 id 的行(如果存在),否则插入它?
  • 那么恐怕它会变得非常复杂,我们需要有关您的表的更多信息。但是您还应该考虑这种工作的程序并查看 manurajhada 的回答 :)

标签: mysql syntax if-statement


【解决方案1】:

如果你正在编写一个程序,你应该尝试:

BEGIN
    IF ((SELECT COUNT(id) FROM tbl_states) > 0) THEN
        SELECT * FROM tbl_cities;
    END IF
END

如果是查询,BEGINEND这里没有任何关系。

编辑

好吧,没什么好说的,IF ((SELECT COUNT(id) FROM tbl_states) > 0) THEN SELECT * FROM tbl_cities; END IF 根本不尊重基本的 MySQL SELECT statement

你应该从SELECT...等开始...

【讨论】:

  • 我在我的查询中仍然遇到这个错误。 IF ((SELECT COUNT(id) FROM tbl_states) > 0) THEN SELECT * FROM tbl_cities; END IF
  • Olivier 你的意思是 () 是多余的吗?我必须在第一个 select 语句之前和之后删除它们吗?
  • 你能帮帮我吗?不幸的是,这里没有任何不同的建议对我有帮助。如果选择语句返回count=0,我想插入一个新行,如果它返回count>0,则更新一行。我希望我能向你展示我的需要。
  • 我知道这是旧的,但为了未来读者的利益,如果您希望在某些更新/插入/删除时自动执行此操作,那么您需要一个触发器;如果您希望能够随时调用此操作,则需要一个例程(存储过程)。您不能在单个(甚至多个)简单查询中执行此操作。
【解决方案2】:

我想你只需要这个:

SELECT * FROM tbl_cities WHERE EXISTS (SELECT * FROM tbl_states)

【讨论】:

  • xdazz,我想知道我的代码有什么问题?这对我来说很奇怪
【解决方案3】:
SELECT *  FROM test2 where (select count(*) from test) > 0;

这里需要使用CASE来创建条件执行.. 试试这个..

CASE WHEN ((SELECT COUNT(id) FROM tbl_states) > 0) THEN
    BEGIN
        UPDATE ...
    END
ELSE
    BEGIN
        INSERT ...
    END
END

【讨论】:

  • CASE 无法做到这一点。这是我的代码:CASE WHEN (1<2) THEN SELECT * FROM tbl_states; WHEN (1>2) THEN SELECT * FROM tbl_cities; END CASE 但我也收到了错误。
  • munurajhada,我想知道为什么在使用 MySQL 时会出现这些问题。我在代码中使用了一个简单的条件1<2,但它根本不起作用。这对我来说更重要的是知道这是怎么回事?
  • 正如我告诉你的,你只是不能写出你在查询中所做的事情。 BEGINEND等只用在程序中。
  • 不,你不能,它的简单条件只为你!在您的服务器代码中作为备用用户count(tbl_states) 并执行更新/插入查询。
【解决方案4】:

这可能会有所帮助:

SELECT * FROM tbl_cities WHERE (SELECT count(1) FROM tbl_states)>0

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多