我有两个具有相同模式的表,创建如下。
CREATE TABLE Table1 (
pk INT PRIMARY KEY,
... other column definitions ...
action CHAR(10) NOT NULL
);
CREATE TABLE StageTable1 LIKE Table1;
定期清除阶段表并加载一些记录。我想更新Table1的所有列,其中包含来自StageTable1的匹配值,其中action等于' update'。
我理解如何使用UPDATE,INNER JOIN和SELECT在MySQL中执行此操作。
UPDATE Table1 t
INNER JOIN
(
SELECT *
FROM StageTable1
WHERE action = 'update'
) s ON t.pk = s.pk
SET t.action = s.action
t.othercol1 = s.othercol2
t.othercol2 = s.othercol2
...
但是这里抓住了。还有其他表Table2,Table3等,每个表都有匹配的Stage表。我想以编程方式生成更新查询,只需更改表名和连接列。我不想指定每个表配对的所有其他列名称。
MySQL是否有办法利用两个表具有相同的模式来执行更新而无需指定每一列的事实?
我当然可以查询列名(通过SHOW COLUMNS)并根据这些结果构建UPDATE查询的SET部分,但我试图避免这样做。
我还可以执行DELETE FROM后跟INSERT INTO,但与执行UPDATE相比,这通常会更慢并且不赞成。我不想选择这个选项只是为了避免列规范要求。