这个问题很简单,但我通过搜索“UPDATE JOIN INSERT”和类似的东西找不到答案。
我需要两个表(“主”和“子”)的更新,而一个数据集可能不存在。那么应该有一个简单的 INSERT 执行之前...在一条语句中。
'main'总是存在的。
'sub' 没有。
我梦幻般的 SQL 解决方案是这个:
UPDATE main LEFT JOIN sub on main.primary=sub.primary
SET main.foo='bar', sub.foo2='bar2'
CASE sub.primary IS NULL {INSERT INTO sub SET sub.primary=main.primary};
“CASE”部分是自由式的,大概不会起作用。 但正确的做法是什么?
它绝对必须是“UPDATE [...] LEFT JOIN [...] SET a=aVal, b=bVal, [...]”- 语句。
它必须可以扩展到最多 5 个 LEFT JOIN 表,并且在没有“SET(..) VALUES(..)”的情况下工作
有什么可能的解决方案吗?
最佳答案
ON DUPLICATE KEY
可能是您最好的选择。
围绕以下内容:
INSERT INTO sub s (col1, col2, col3)
SELECT m.col1, m.col2, m.col3
FROM MAIN m
ON DUPLICATE KEY
UPDATE SET m.foo='bar', s.foo2='bar2'
如果您需要将左联接作为查询的一部分,只需将其添加到选择中,如下所示:
INSERT INTO sub s (col1, col2, col3)
SELECT m.col1, m.col2, m.col3
FROM MAIN m
LEFT JOIN sub s ON s.primary = m.primary
LEFT JOIN sub2 s2 ON s2.primary = m.primary
ON DUPLICATE KEY
UPDATE SET m.foo='bar', s.foo2='bar2', s.foobar = s2.foobar
关于mysql - 更新加入 -> 插入 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335030/