mysql - 我不明白如何检查sql中的查询条件

标签 mysql sql

我正在尝试编写以下查询,但我对 SQL 不太满意。 我隔离了插入和更新,它可以工作,但我无法进行条件控制。 我不明白为什么它总是失败,有人可以帮助我吗?

IF (SELECT * FROM Infopoints WHERE name = @name) THEN 
    BEGIN
      INSERT INTO Infopoints (idInfopoint, createdAt, updatedAt, name) 
      VALUES(@idInfopoint, @createdAt, @updatedAt, @name)
    END;
    ELSE
    BEGIN
      UPDATE Infopoints SET updatedAt = @updatedAt WHERE name = @name;
    END;
ENDIF;";

最佳答案

您想要重复 key 更新。我认为逻辑是:

INSERT INTO Infopoints (idInfopoint, createdAt, updatedAt, name) 
      VALUES(@idInfopoint, @createdAt, @updatedAt, @name)
      ON DUPLICATE KEY UPDATE updatedAt = @updatedAt;

为此,您需要在 name 上有一个唯一索引:

CREATE UNIQUE INDEX idx_infopoints_name ON infopoints(name);

您想要的 IF 逻辑是:

IF NOT EXISTS (SELECT * FROM Infopoints WHERE name = @name) THEN 
. . .

但是,ON DUPLICATE KEY UPDATE 是更好的方法。

关于mysql - 我不明白如何检查sql中的查询条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37413944/

相关文章:

php - 在 MySQL 中合并结果

php - 在 MySQL 解决方案中存储日期范围

php - 在 PHP 中显示最近日期和分页的信息

mysql - Sailsjs 不输出 bigint

sql - 增加大表中的列长度

mysql - 如果值为空或不为两个新值,则在 SQL 中赋值

php - MySQL 连接到数据库

asp.net - 将 Linq 转换为 SQL

sql - 仅返回 GROUPING SETS 查询中每个组的前 n 个结果

mysql - mysql 两个表中两列的总和