2015-06-17 144 views
0

我在同一个数据库中有两个表。将两个表合并为一个并删除重复项

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

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

SELECT * 
FROM table1,table2 
JOIN 
GROUP BY id 
+0

它们是否具有相同的结构?如果是这样,请使用'UNION'。 –

+1

@ PM77-1没有人有4列和其他12 – angs

+1

那么你究竟是什么意思的“*合并*”?请提供一些示例数据和期望的结果。 –

回答

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 
0

通过合并两个表,你是什么意思?你想要来自一个表和列的记录和列以及来自两者的记录吗? 无论哪种方式,您只需要更改连接子句。

你可以做,如果你只从表1进行左想列要

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

现在就加入 如果你想列列的连接只从表2则右连接 如果你想来自两个表的列都按原样使用查询。 如果存在具有相同数据的多个行,则DISTINCT可确保您只获得一行(但是,不同的行将检查行中所有列的值,无论它们是否不同或相同) 如果两个表都有不同的列数。如果您不知道连接,则使用笛卡尔积

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

其中,id是表格之间通用的列。 在这里,如果你想只从表1列做

select distinct tb1.* 

同样由TB2在上面的语句代替TB1如果你只是想表2列。

select distinct tb2.* 

如果你想从两者的cols只写 '*'

在这两种情况下,即如果你需要有选择性的列只是写一个表别名,那么上面说的连接和产品就可以了。例如。 考虑: table1中有ID,FOO,酒吧栏目 表2有ID,名称,卷没有,年龄

你无论是在选择查询结果表 做到这一点只想要ID,FOO,名称:

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 

注意,这不能使用一个连接作为连接需要公共列“开”携手实现

+0

只是一两件事,我不认为你查询 SELECT * FROM 表1,表2 JOIN GROUP BY ID 会工作。 GROUP BY使用聚合函数,例如计数,总和,最大值,最小值等。 通过emp_sal,emp_age从员工 组中选择计数(emp_name),emp_sal,emp_age ; 这里不适用。因此group by不能被使用。改用连接 – Proxima

相关问题