我的table1包含列:id,a,b
我有table2的列:a,b,c
我想更新table2的值c,条件是table1.a = table2.a和table1.b = table2.b
如果不满足上述条件,我想插入table2值a,b和c(如果table2中没有行,则表示满足条件)
要“以”开头“,我只有值table1.id和c。
背景: 我有一个html表单,只发布table1的id和带c的字段。
答案 0 :(得分:2)
使用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]);
如果您确实需要处理行尚未存在的情况,请使用带有INSERT
选项的ON 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]);
确保(a, b)
中的table2
上有唯一的密钥。如果没有,请添加一个:
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。