mysql - 如何根据值选择要更新的列

标签 mysql sql insert

我有一个表,其中包含 1 个主键列 a、1 个不可为空的外键列 b 和 5 个可为空的外键列 c、d、e、f、g。

我必须将值 Y 插入到值 X 为主键的行中:

  • 如果表中不存在 X,我必须使用以下内容创建一个新行:

    INSERT INTO table(a, b) VALUES (X, Y)
    
  • 如果 X 存在于表中并且 b 包含值,我必须在 c 列中设置 Y:

    UPDATE table SET c = Y
    
  • 如果 X 存在于表中并且 b 和 c 包含一个值,我必须在 d 列中设置 Y:

    UPDATE table SET d = Y
    

等等;如果该行已满,则不会发生任何事情。

如何在工作查询中翻译它?请注意,我使用的是 MySQL。谢谢。

最佳答案

您可以使用INSERT ... ON DUPLICATE KEY UPDATE使用键 X 更新行(如果存在)。如果列为 NULL 并且其“前驱”不是 NULL(c 除外),则需要将其设置为 X code> 为 b 被声明为 NOT NULL)。可以用 CASE ... END 来表示.

INSERT INTO table
            (a,
             b)
            VALUES (X,
                    Y)
       ON DUPLICATE KEY UPDATE c = CASE
                                     WHEN c IS NULL
                                       THEN Y
                                     ELSE
                                       c
                                   END,
                               d = CASE
                                     WHEN d IS NULL
                                          AND c IS NOT NULL
                                       THEN Y
                                     ELSE
                                       d
                                   END,
                               e = CASE
                                     WHEN e IS NULL
                                          AND d IS NOT NULL
                                       THEN Y
                                     ELSE
                                       e
                                   END,
                               f = CASE
                                     WHEN f IS NULL
                                          AND e IS NOT NULL
                                       THEN Y
                                     ELSE
                                       f
                                   END,
                               g = CASE
                                     WHEN g IS NULL
                                          AND f IS NOT NULL
                                       THEN Y
                                     ELSE
                                       g
                                   END;

关于mysql - 如何根据值选择要更新的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956385/

相关文章:

java - 如何在mysql for java中创建存储过程?

mysql - MySQL语句中的ORDER BY分别为正数和负数

mysql - WordPress 插入查询不起作用

mysql - 回流焊 INT UNSIGNED 系列

MySQL - 列名已命名为 'TimeStamp' ,需要在 Where 子句中使用它

mysql - MySQL Workbench 需要服务器才能运行吗?

PHP 和 MySQL 安全性

sql - SQL 中现有字段名称后未放置逗号时会发生什么

sql - make_hash() 函数?哈希码?

ruby-on-rails - 使用 PostgreSQL 使用 ActiveRecord 准备和执行语句