【问题标题】:SQL Query Update field depending on subquerySQL 查询更新字段取决于子查询
【发布时间】:2015-09-27 02:25:03
【问题描述】:

我需要一个 SQL 查询。 我的表用户有 3 个字段:名称、iduser、idgroup。

一个用户可以在同一张表上多次出现,具有相同的 iduser 和不同的 idgroup。

如果字段名称已更改,则应更新为新值。

如果不存在具有给定 iduser 和 idgroup 的行,则必须将其作为新行插入。

IF EXISTS(SELECT 1 FROM users WHERE iduser=3 AND idgroup=4)
BEGIN
     UPDATE users SET Name='New Name' WHERE iduser=3 AND idgroup=4
END
ELSE
     INSERT INTO users VALUES('Name',5,3)
END

我的 SQL Query sintax 错误,无法使用,请问如何实现我的需求?

我正在使用 mySQL 数据库(由 phpmyadmin 管理)并从 lua 脚本进行插入。

【问题讨论】:

    标签: mysql sql insert exists


    【解决方案1】:

    您需要确保拥有正确的唯一键。

    ALTER TABLE users ADD UNIQUE `unique_index`(`iduser`, `idgroup`);
    

    然后,您应该能够运行此插入/更新:

    INSERT INTO users (Name, iduser, idgroup) 
    VALUES ('name value',5,3) 
    ON DUPLICATE KEY UPDATE Name = VALUES(Name) WHERE Name <> VALUES(Name)
    

    【讨论】:

    • 如何添加此条件:仅在旧名称!= 新名称值时更新名称??
    • @XaviGarciaVazquez 您可以在最后添加一个 where close 。我正在更新答案。
    • INSERT INTO usuarios (Nombre, id, grupo) VALUES('newname', 2,4,13) ON DUPLICATE KEY UPDATE Nombre = 'newname' 这行得通,但我也需要最后一个条件......它不会使用现有的 iduser(和不同的 idgroup)插入新行
    • iduser 上是否有唯一索引(或主键)?
    • iduser不能为主键,不同行可以有相同的iduser,不同的idgroup
    猜你喜欢
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2022-08-20
    相关资源
    最近更新 更多