更新加入 -> 插入 NULL

UPDATE JOIN -> INSERT ON NULL

这个问题很简单,但我通过搜索 "UPDATE JOIN INSERT" 和其他类似的东西没有找到答案。

我需要更新两个表('main' 和 'sub'),而一个数据集可能不存在。那么应该有一个简单的 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(..)"

的情况下工作

有什么可能的解决方案吗?

UPDATE 语句可以修改存在的行。无法添加新行。绝对地。

INSERT 语句可用于向 table 添加行。编写添加 "missing" 行的语句绝对是可能的。

但是如果"it absolutely has to be an UPDATE"语句添加行,那就无解了。

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'

如果您需要将左联接作为查询的一部分,只需将其添加到 select 中,如下所示:

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