【问题标题】:IF NOT EXIST NOT WORKING如果不存在不工作
【发布时间】:2016-06-19 14:17:52
【问题描述】:
IF NOT EXISTS(SELECT * FROM `user` WHERE `name`='Rutvij' AND `lang`='python')
    BEGIN
        INSERT INTO `user` VALUES ('Rutvij', 'python', 25)
    END
ELSE
    BEGIN
        UPDATE user SET `name`='Kanzaria' WHERE `name`='Rutvij'
    END

我正在 phpmyadmin sql 区域中尝试上述查询。我正在使用 xampp。它抛出错误说明

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 'IF EXISTS(SELECT * FROM user) 附近 SELECT name FROM use' 在第 1 行

我也试过下面的代码

IF NOT EXISTS(SELECT * FROM user WHERE name='Rutvij' AND lang='python')
    BEGIN
        INSERT INTO user VALUES ('Rutvij', 'python', 25)
    END
ELSE
    BEGIN
        INSERT INTO user VALUES ('Kanzaria', 'python', 25)
    END

挣扎了这么久。请帮忙。谢谢!!

【问题讨论】:

  • 如果作为路由选项(不是函数)仅适用于过程和触发器。您可能还想查看 REPLACE INTO。
  • 我认为您需要在mysql 中包含ifthen 声明?

标签: mysql sql not-exists


【解决方案1】:

MySQL 不允许 if 逻辑,除非您在编程块(存储过程、触发器或函数)中。

幸运的是,你可以用WHERE 逻辑做同样的事情:

INSERT INTO user 
    SELECT 'Rutvij', 'python', 25
    FROM DUAL
    WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python')
    UNION ALL
    SELECT 'Kanzaria', 'python', 25
    FROM DUAL
    WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');

MySQL 应该在INSERT 之前处理SELECT,所以应该只插入一行。

或者,您可以以两个 INSERTs 的形式执行此操作,但顺序相反:

INSERT INTO user 
    SELECT 'Kanzaria', 'python', 25
    FROM DUAL
    WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');

INSERT INTO user 
    SELECT 'Rutvij', 'python', 25
    FROM DUAL
    WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');

【讨论】:

  • 如果我想在记录存在时更新怎么办?那我该怎么办?如果不存在,则插入 else 更新。
  • @RutvijKanzaria 。 . .你会使用insert . . . on duplicate key update
【解决方案2】:

这不是查询,这将是一个带有控制流逻辑的 sql 脚本,这在存储程序(过程、函数、触发器)之外的 mysql 中是不允许的。即使你把上面的代码封装成一个存储过程也行不通,因为exist / not exists只能用在子查询中。

我会做以下事情:

  1. 创建stored procedure
  2. 声明一个整数变量
  3. 使用select into name='Rutvij' AND lang='python' 所在的行数提取到您的变量中。
  4. 使用 if 语句根据记录数进行插入。

【讨论】:

    猜你喜欢
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多