【问题标题】:Merge two tables to one and remove duplicates将两个表合并为一个并删除重复项
【发布时间】:2015-06-17 15:57:02
【问题描述】:

我在同一个数据库中有 2 个表。

我想根据共同的id 列合并它们。因为表格太大,我不确定是否有重复。

如何根据id 将这两个表合并为一个并确保没有重复?

SELECT *
FROM table1,table2
JOIN
GROUP BY id

【问题讨论】:

  • 它们的结构是否相同?如果是这样,请使用UNION
  • @PM77-1 没有,一列有 4 列,另一列有 12 列
  • 那么你所说的“merge”到底是什么意思呢?请提供一些示例数据和期望的结果。
  • @PM77-1 根据 id 将 2 个表加入 1 个表

标签: mysql sql sql-merge


【解决方案1】:

合并两个表是什么意思?您想要两个表中的记录和列,还是一个表中的列和两个表中的记录? 无论哪种方式,您都只需要更改连接子句。

你可以在你想加入的列上做一个连接

SELECT DISTINCT * 
  FROM table1 tb1
  JOIN table2 tb2 
    ON table1.id = table2.id 

现在,如果您只想要 table1 中的列,请执行 LEFT JOIN 如果您只需要 table2 中的列,则使用 RIGHT JOIN 如果您想要两个表中的列,请按原样使用查询。 DISTINCT 确保在多行具有相同数据的情况下仅获得单行(但此 distinct 将检查行中所有列的值是否不同或相同) 如果两个表的列数不同,联合将无济于事。如果您不了解联接,请使用笛卡尔积

select distinct * 
  from table1 tb1, table2 tb2 
 where tb1.id = tb2.id

其中 id 是表之间共有的列。 在这里,如果您只想要 table1 中的列,请这样做

select distinct tb1.* 

如果您只需要 table2 列,则在上述语句中将 tb1 替换为 tb2 类似。

select distinct tb2.*

如果你想要两者的列,只需写 '*'

在任何一种情况下,即如果您需要选择性列,只需编写一个表别名即可。例如。 考虑 : table1 有 id, foo, bar 作为列 table2 有 id、name、roll no、age

您只需要选择查询结果中两个表的 id、foo、name 这样做:

select distinct tb1.id, tb1.foo, tb2.name 
  from table1 tb1 
  join table2 tb2 
    on tb1.id=tb2.id

笛卡尔积查询也是如此。 tb1, tb2 被称为表别名。

如果您想要两个表中的数据,即使它们没有任何共同之处,也可以这样做

select distinct * 
  from table1 , table2

请注意,这不能使用连接来实现,因为连接需要一个公共列来连接“on”

【讨论】:

  • 我认为您查询 SELECT * FROM table1,table2 JOIN GROUP BY id 不会起作用的一件事。 GROUP BY 适用于聚合函数,例如计数、总和、最大值、最小值等,例如从员工组中选择计数(emp_name),emp_sal,emp_age by emp_sal,emp_age;这里不适用。因此不能使用 group by。改用连接
【解决方案2】:

我不确定你到底想要什么,但无论如何,这是你的代码

SELECT *
FROM table1,table2
JOIN
GROUP BY id

我只是编辑你的查询

SELECT *
FROM table1  JOIN  table2 
 on table2.id = table1.id
GROUP BY table1.id // here you have to add table 
//on which you will be group by at this moment this is table1

【讨论】:

    【解决方案3】:

    试试 UNION: https://dev.mysql.com/doc/refman/5.0/en/union.html

    IT 非常简单。希望它会有所帮助。

    您还应该看看“DISTINCT”。

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2017-06-05
      • 2015-11-29
      • 1970-01-01
      • 2012-11-08
      • 2015-09-20
      • 2010-11-22
      • 1970-01-01
      • 2015-06-09
      相关资源
      最近更新 更多