将两个表合并为一个并删除重复项

时间:2015-06-17 15:57:02

标签: mysql sql sql-merge

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

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

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

SELECT *
FROM table1,table2
JOIN
GROUP BY id

3 个答案:

答案 0 :(得分:1)

合并两张桌子是什么意思?您是否希望来自一个表或列的记录和列以及两者中的记录? 无论哪种方式,您都只需要更改连接子句。

您可以在希望

的列上进行联接
SELECT DISTINCT * 
  FROM table1 tb1
  JOIN table2 tb2 
    ON table1.id = table2.id 

现在,如果您只希望来自table1的列执行LEFT JOIN 如果您只希望来自table2的列,则需要一个RIGHT JOIN 如果您想要两个表中的列,请按原样使用查询。 如果有多个行具有相同的数据,则DISTINCT确保您只获得一行(但不同的行将检查行中所有列的值,无论它们是不同的还是相同的) 如果两个表的列数不同,Union将无法提供帮助。如果您不了解连接,请使用笛卡尔积

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

其中id是表之间通用的列。 这里,如果您只想要来自table1的列

select distinct tb1.* 

如果你只想要table2列,同样在上面的语句中用tb2替换tb1。

select distinct tb2.*

如果你想要两个cols只写'*'

在任何一种情况下I.e.上面说的连接和产品,如果你需要选择列,只需写一个表别名。例如。 考虑: table1将id,foo,bar作为列 table2有id,name,roll no,age

您只需要select select查询结果中两个表中的id,foo和name 这样做:

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

同样适用于笛卡尔积查询。 tb1,tb2被BTW称为表别名。

如果您想要来自两个表的数据,即使它们没有任何共同之处,只需执行

select distinct * 
  from table1 , table2

请注意,使用联接可以实现 ,因为联接需要使用公共列来加入“on”

答案 1 :(得分:0)

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

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

另外你应该看看“DISTINCT”。

答案 2 :(得分:0)

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

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