[我有两个表t1
和t2
,如果t1
和t2
共享一个相同的唯一键,我想用t1
的内容更新t2
。给定的行,则使用t2
并覆盖t1
行,否则我们将非重复的t2
行添加到t1
。
因此,当不重复时,将t2
的列添加到t1
,否则,用t1
重复的行覆盖t2
。
我知道MySQL有多种方法可以执行此操作,但是似乎没有一种方法可以在不显式列出要替换的所有列的情况下实现整个表的合并。
t1
和t2
都在我的架构中有很多列,所以我宁愿不将它们全部列出。
如果我没有那么多的列,我将采用以下方法:
INSERT INTO t1(a, b, c)
SELECT d, e, f FROM t2
ON DUPLICATE KEY UPDATE b = t2.e, c = t2.f;
适合3列,但我有18列!
适应以上情况以实现更通用的解决方案,而我不需要明确指出将更改应用于哪些列是我的目标。
我已经到了:
insert into t1
select * from t2
ON DUPLICATE KEY UPDATE
t1.b = t2.b,
t1.c = t2.c;
但是如上所述,当使用UPDATE关键字找到重复项时,仍然需要明确指出要更新哪些列。
我确信有一种明显的方法可以避免显式定义要替换的列的问题,但是MySQL至少可以说不是我最强大的语言,所以我很感激专家告诉我如何解决这个问题。
更新
我被迫使用MySQL 5。
似乎您需要简单的REPLACE statement:
REPLACE INTO t1
TABLE t2
当然,这些表必须具有相同的结构(包括字段名称,类型,顺序...)。
如果没有,或者如果您使用的MySQL版本比8更旧,请使用REPLACE..SELECT:
REPLACE INTO t1(a, b, c)
SELECT d, e, f FROM t2