我已经看到了一些关于这个问题的片段,但是没有一个能够完全回答这个问题。我拼凑了一个phpmyadmin最初并不抱怨的版本,但当我执行时,它抱怨。。。
SELECT IF( EXISTS(
SELECT 1 FROM opts
WHERE field_from_tbl1=47 AND field_from_tbl2=153) THEN
UPDATE tbl3
SET acct_id='update@us.com',
id_type='email',
status='valid',
change_log=CONCAT(change_log, '|this_change_log_update|'),
bool1=false,
bool2=true
WHERE field_from_tbl1=47 AND field_from_tbl2=153
ELSE
INSERT INTO tbl3 (field_from_tbl1, field_from_tbl2, acct_id, id_type, status, change_log, bool1, bool2)
VALUES (47, 153, 'insert@us.com', 'email', 'valid', '|this_change_log_update|', false, true)
注意:另外两个表中的字段值不能单独唯一。在一个组合中,两者都必须是唯一的,这也许是可以的,但我还没有弄清楚。因此,我正在研究假设限制,即db不会强制这些是唯一的,我认为这会删除我使用replace的选项。另外,您可能注意到if语句中缺少“)”。当我试图添加它时,该死的东西抱怨。这里有一个帖子建议在第3行中的then之前加上“,”1,0“),但也有错误。最后,您可能注意到我在change\u log字段上使用concat,所以我们不替换现有值,而是添加到它。
1条答案
按热度按时间5hcedyr01#
正如@timbiegeleisen所说,如果您在
field_from_tbl1
以及field_from_tbl2
你可以用一个INSERT ... ON DUPLICATE KEY UPDATE
执行此操作。这应该起作用:这个
VALUES
函数从INSERT
部分声明UPDATE
.如果需要,可以添加一个适当的索引
ALTER TABLE
: