MySQL - 将两个表合并为第三个表,不重复

标签 mysql select insert duplicates

我很难理解这里的一个概念。我拥有的是三个结构相同的表。我需要将 table 1table 2INSERT INTO table 3 结合起来。我的问题:

表 1表 2 具有重复的内容,异常(exception)是它们的 ID。不过,除了 AI 之外,我没有将 ID 用于任何其他用途,因此这确实不是一个问题。

我希望完成的一个例子是:

                        original TABLE 1
 _________________________________________________________
|    ID   |      Col 2     |     Col 3    |      Col 4    |
|---------------------------------------------------------|
|   1     |     stuff_1    |     stuff_2  |     stuff_3   |
|---------------------------------------------------------|
|   2     |     stuff_x    |     stuff_y  |     stuff_z   |
|_________________________________________________________|

结合

                        original TABLE 2
 _________________________________________________________
|    ID   |      Col 2     |     Col 3    |      Col 4    |
|---------------------------------------------------------|
|   3     |     stuff_1    |     stuff_2  |     stuff_3   |
|---------------------------------------------------------|
|   4     |     stuff_a    |     stuff_b  |     stuff_c   |
|_________________________________________________________|

制作

combined TABLE 3 (notice ID's are not counted in duplicate check)
 _________________________________________________________
|    ID   |      Col 2     |     Col 3    |      Col 4    |
|---------------------------------------------------------|
|   ?     |     stuff_1    |     stuff_2  |     stuff_3   |
|---------------------------------------------------------|
|   ?     |     stuff_x    |     stuff_y  |     stuff_z   |
|---------------------------------------------------------|
|   ?     |     stuff_a    |     stuff_b  |     stuff_c   |
|_________________________________________________________|

我尝试过insert into table 3 select * from table 2;然后从表1中执行insertignore。我尝试replace into 也是如此,但因为我省略了 ID,所以这些不起作用,因为列计数已关闭。有谁知道如何在处理 ID 问题时将这两个表合并到第三个表中?我要重申的是,ID 是什么并不重要,因为它们永远不会被使用。

最佳答案

您可以使用GROUP BY 消除重复项,同时保留ID 值。

这将为您提供唯一的 Col1Col2Col3 值,并将 ID 设置为合并为重复行的最小 ID 值:

INSERT INTO Table3 (ID, Col1, Col2, Col3)
SELECT MIN(ID), Col1, Col2, Col3
FROM (
  SELECT ID, Col1, Col2, Col3 FROM Table1
  UNION SELECT ID, Col1, Col2, Col3 FROM Table2
) Table1And2
GROUP BY Col1, Col2, Col3

根据您发布的数据,结果应该是这样的:

ID    Col1     Col2     Col3
--    -------  -------  -------
 1    stuff_1  stuff_2  stuff_3
 2    stuff_a  stuff_b  stuff_c
 4    stuff_x  stuff_y  stuff_z

关于MySQL - 将两个表合并为第三个表,不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16676975/

相关文章:

MySQL 查询在新服务器上花费太多时间

sql - 如果存在重复行,则增加 SQL 数据库中的列值

insert - 插入时 DB2 重复键错误,但在选择计数(*)后工作

php - 如何从 html/php 页面内的 mySQL 数据库打印表格

android - 如何在android中将.db文件转换为MySQL数据库?

mysql - SQL - 选择其中具有特定值和其他随机值的列

mysql - 条件中包含另一个查询的复杂查询

mysql - 选择所有不在表中的

SQL 选择可能包含特定值的所有记录

MySQL 插入语句 - 关于重复键更新