我正在重构一些代码,这是一个PHP-MYSQL项目。所以我试图在一个查询中更新一些表或至少两个。
这可以在没有连接的情况下实现吗?什么是最佳选择?
UPDATE document D SET D.status = 2,
CASE
WHEN D.type 'A' THEN (UPDATE table_1 SET active = 1 WHERE id_table1 = D.id_document)
WHEN D.type 'B' THEN (UPDATE table_2 SET active = 1 WHERE id_table2 = D.id_document)
WHEN D.type 'C' THEN (UPDATE table_3 SET active = 1 WHERE id_table3 = D.id_document)
END
WHERE D.id_document = %s
我不介意将第一个表“文档D”分开,但我需要“case when”来更新单个查询中的多个表,因为它们就像11个表。
答案 0 :(得分:0)
您是否尝试将其全部放在一个查询中以提高性能?在这种情况下,这将无济于事,因为如果每个子查询单独执行,它将花费相同的时间。
如果您在PHP代码中确定了表名,然后将其传递给更简单的查询字符串,那么您将获得更清晰的代码和更好的性能。
答案 1 :(得分:0)
不要回答这个问题。根据我研究的内容。
唯一可以做的是:
使用联接更新多个表
UPDATE table_1
INNER JOIN table_2 ON table_1.id = table_2.id
INNER JOIN table_3 ON table_3.id = table_3.id
SET table_1.column = '', table_2.column = ''
WHERE any condition;
“案例”只能以单一方式使用
UPDATE table SET
column = CASE columX WHEN 'A' THEN '2' ELSE column END,
column2 = CASE columX WHEN 'B' THEN '2' ELSE column2 END
结合这两者,我能够实现我所需要的。
请记住,您可以使用“where”进行不同类型的连接和播放。在“case”子句中,更新列是必需的,而不是可选的,因此当我不需要更新该列时,我使用“else”中的相同列将其保留为默认值。