gpt4 book ai didi

mysql - 更新加入 -> 插入 NULL

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:32 25 4
gpt4 key购买 nike

这个问题很简单,但我通过搜索“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com