gpt4 book ai didi

MySQL - 基于比较插入或更新

转载 作者:行者123 更新时间:2023-11-29 15:35:46 25 4
gpt4 key购买 nike

我有 table1,其中包含以下列:id、a、b
我有 table2,其中包含以下列:a、b、c

我想更新 table2 的值 c,条件是 table1.a = table2.a 且 table1.b = table2.b
如果不满足上述条件,我想插入表2值a、b和c(如果表2中不存在行,则满足条件)
“开始”时,我只有值 table1.id 和 c。

背景:我有一个 html 表单,仅发布 table1 的 id 和带有 c 的字段。

最佳答案

使用UPDATE,而不是REPLACE。当您需要根据行是否已存在进行更新或插入时,请使用REPLACE。但由于您要连接表,该行必须已经存在,因此不需要插入选项。

db.query('UPDATE table2 AS t2
JOIN table1 AS t1 ON t1.a = t2.a AND t1.b = t2.b
SET t2.c = ?
WHERE t1.id = ?',
[c, id]);

如果您确实需要处理该行尚不存在的情况,请将 INSERTON DUPLICATE KEY UPDATE 选项结合使用。

db.query('INSERT INTO table2 (a, b, c)
SELECT a, b, ?
FROM table1 WHERE id = ?
ON DUPLICATE KEY c = VALUES(c)',
[c, id]);

确保 table2 中的 (a, b) 上有唯一的键。如果没有,请添加一个:

ALTER TABLE table2 ADD UNIQUE KEY (a, b);

这是另一种方法。您可以使用顶部的 UPDATE 查询来查找两个表之间匹配的行,并使用以下 INSERT 查询来添加不匹配的行:

db.query('INSERT INTO table2 (a, b, c)
SELECT t1.a, t1.b, ?
FROM table1 AS t1
LEFT JOIN table2 AS t2 ON t1.a = t2.a AND t1.b = t2.b AND t1.id = ?
WHERE t2.a IS NULL",
[c, id]);

它使用的 SELECT 查询基于 Return row only if value doesn't exist .

关于MySQL - 基于比较插入或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58253262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com