【问题标题】:SQL Query Error - If Else StatementSQL 查询错误 - If Else 语句
【发布时间】:2014-07-09 18:40:38
【问题描述】:

以下 SQl 查询给出了错误:

IF EXISTS (SELECT * FROM comments WHERE user_id='2' AND course_id='1') 
UPDATE comments SET page1='exists' WHERE user_id='2' AND course_id='1' 
ELSE 
INSERT INTO comments (user_id,course_id,page1) VALUES ('2','1','inserted')

" #1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册,了解在 'IF EXISTS (SELECT * FROM cmets WHERE user_id='2' 附近使用的正确语法AND course_id='1') UPDATE co' at line 1 "

我确定语法是正确的?!

【问题讨论】:

  • 您是否尝试将其作为独立的 SQL 片段(在这种情况下,在 user_id 和 course_id 上具有唯一键,然后使用 INSERT....ON DUPLICATE KEY UPDATE 会更容易),或者作为存储过程中的行?
  • 我正在尝试通过 phpMyAdmin 将其作为 SQL 查询运行
  • 那不是有效的 SQL。 IF 是一个流控制语句,使用原始 SQL 查询没有要控制的流。

标签: mysql sql select


【解决方案1】:

添加一个覆盖 user_id 和 course_id 的唯一键

那就用

INSERT INTO comments (user_id,course_id,page1) 
VALUES ('2','1','inserted')
ON DUPLICATE KEY UPDATE page1='exists'

【讨论】:

  • 感谢 Kickstart 在 phpMyAdmin 中完美运行。虽然在 php 中使用这个 SQL 语句似乎不起作用。插入有效,但我认为它是导致问题的重复关键部分。有没有办法解决?对不起,我想如果它在 phpMyAdmin 中工作,它也可以在 php 中工作。
【解决方案2】:

检查此IF-statement 语法:

试试这个:

IF EXISTS (SELECT * FROM comments WHERE user_id='2' AND course_id='1') THEN 
    UPDATE comments SET page1='exists' WHERE user_id='2' AND course_id='1';
ELSE 
    INSERT INTO comments (user_id,course_id,page1) VALUES ('2','1','inserted');

按照我的说法,您必须练习 BEGIN...END 块,如下所示。

IF EXISTS (SELECT * FROM comments WHERE user_id='2' AND course_id='1') THEN 
BEGIN 
    UPDATE comments SET page1='exists' WHERE user_id='2' AND course_id='1';
END 
ELSE 
BEGIN 
    INSERT INTO comments (user_id,course_id,page1) VALUES ('2','1','inserted');
END

我上面的查询将在过程(PL-SQL)中工作。如果您想在 SQL 中使用上述查询 然后使用下面的代码:

在您的 user_id & course_id 列上创建一个 UNIQUE 约束(如果尚不存在):

ALTER TABLE comments ADD UNIQUE (user_id,course_id);

使用INSERT ... ON DUPLICATE KEY UPDATE:

INSERT INTO comments (user_id,course_id,page1) 
VALUES ('2','1','inserted') 
ON DUPLICATE KEY UPDATE page1='exists'

【讨论】:

  • 我认为这不是有效的 MySQL 语法
  • 你试过了吗? SQL 中没有IF 语句(MySQL 的 SQL 方言中也没有)
  • 感谢 Saharsh 的努力,但这仍然不起作用
猜你喜欢
  • 2015-05-04
  • 2012-07-16
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2015-11-18
  • 2015-01-05
相关资源
最近更新 更多