我有一个表,其中包含 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/