更新加入 -> 插入 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
这个问题很简单,但我通过搜索 "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