使用案例和子查询 MySql 更新多个表
Update mutiple tables using case and subquery MySql
我正在重组一些代码,这是一个 PHP - MYSQL 项目。所以我试图在一个或至少两个查询中更新一些 table。
这是否可以在没有连接的情况下实现?什么是最好的选择?
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
我不介意将第一个 table“文档 D”分开,但我需要“case when”在单个查询中更新多个 tables,因为它们就像 11 tables.
您是否试图将所有内容放在一个查询中以提高性能?这在这种情况下无济于事,因为它所花费的时间与单独执行每个子查询所花费的时间相同。
如果您在 php 代码中确定 table 名称,然后将其传递给更简单的查询字符串,您将获得更简洁的代码和更好的性能。
不要让问题悬而未决。根据我的研究。
- 不,您不能在子查询中执行 "update"。
- 不,你不能那样使用 "case"。
唯一能做的就是:
使用连接更新多个表
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;
而"case"只能单一使用
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" 中使用相同的列,以便在不需要更新该列时保留默认值。
我正在重组一些代码,这是一个 PHP - MYSQL 项目。所以我试图在一个或至少两个查询中更新一些 table。
这是否可以在没有连接的情况下实现?什么是最好的选择?
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
我不介意将第一个 table“文档 D”分开,但我需要“case when”在单个查询中更新多个 tables,因为它们就像 11 tables.
您是否试图将所有内容放在一个查询中以提高性能?这在这种情况下无济于事,因为它所花费的时间与单独执行每个子查询所花费的时间相同。
如果您在 php 代码中确定 table 名称,然后将其传递给更简单的查询字符串,您将获得更简洁的代码和更好的性能。
不要让问题悬而未决。根据我的研究。
- 不,您不能在子查询中执行 "update"。
- 不,你不能那样使用 "case"。
唯一能做的就是:
使用连接更新多个表
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;
而"case"只能单一使用
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" 中使用相同的列,以便在不需要更新该列时保留默认值。