0

我有大量具有相同列结构的动态表。我希望用一个查询来更新所有这些行中的某些行。我发现的任何多表 UPDATE 示例都与在不同表中执行不同列以及根据另一个表中的值更新一个表有关。我的问题是我在所有表中都有相同的列,并且它是动态数量的表。

例如,我将有 table_a、table_b 和 table_c。所有三个表都将共享相同的结构:id 和 status。

我想一次将所有三个中的状态列更新为已知值。

这是我想在此示例中基本结合的查询。

UPDATE table_a SET status = 'closed' WHERE id = 5
UPDATE table_b SET status = 'closed' WHERE id = 5
UPDATE table_c SET status = 'closed' WHERE id = 5

由于表的数量是动态的,我觉得这对于单个查询来说是最干净的。我在 PHP 中有一个表名数组(为此系统动态加载),并且可以迭代它们以形成连接或在需要时连接字符串。

这是我认为可行的示例。

UPDATE table_a, table_b, table_c
SET status = 'closed'
WHERE id = 5

这个查询的问题是我得到一个关于列名歧义的错误。

我需要让它像这样吗?

UPDATE table_a, table_b, table_c
SET table_a.status = 'closed', table_b.status = 'closed', table_c.status = 'closed
WHERE table_a.id = 5 OR table_b.id = 5 OR table_c.id = 5

我假设这会起作用并且可能不会太糟糕,因为预期的表格数量实际上可能在 1-10 之间。但是,我真的希望有一种更有效的方法。用这么少的查询触发单个查询可能不是那么糟糕,但在一个大系统中,每一点优化都很重要!

感谢您的任何帮助。

请注意,具有相同方案的多个表的结构是设计使然,因为它是一个分隔多个位置的跟踪器系统。例子只反映了我需要实现的idea的基本结构;实际情况要复杂得多。此外,存储过程将不是此项目中的选项。

4

1 回答 1

0

是的,如果它们使用相同的逻辑名称,您需要限定要更新的每个表/列。

查询看到您正在寻找“状态”的逻辑名称,但您已将“状态”定义为数据库中 3 个不同物理位置的逻辑名称。你说的是哪一个?当涉及多个表时,可以做很多事情。因此,让数据库假设您要更新所有这些将是非常糟糕的。

于 2012-09-18T20:12:54.580 回答