MySQL,如果不重复则插入,否则替换-整个表

问题描述 投票:0回答:1

[我有两个表t1t2,如果t1t2共享一个相同的唯一键,我想用t1的内容更新t2。给定的行,则使用t2并覆盖t1行,否则我们将非重复的t2行添加到t1

因此,当不重复时,将t2的列添加到t1,否则,用t1重复的行覆盖t2

我知道MySQL有多种方法可以执行此操作,但是似乎没有一种方法可以在不显式列出要替换的所有列的情况下实现整个表的合并。

t1t2都在我的架构中有很多列,所以我宁愿不将它们全部列出。

如果我没有那么多的列,我将采用以下方法:

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。

mysql
1个回答
0
投票

似乎您需要简单的REPLACE statement

REPLACE INTO t1
TABLE t2

当然,这些表必须具有相同的结构(包括字段名称,类型,顺序...)。

如果没有,或者如果您使用的MySQL版本比8更旧,请使用REPLACE..SELECT:

REPLACE INTO t1(a, b, c)
SELECT d, e, f FROM t2
© www.soinside.com 2019 - 2024. All rights reserved.