1

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

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

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

SELECT *
FROM table1,table2
JOIN
GROUP BY id
4

3 回答 3

2

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

您可以在您希望的列上进行连接

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.*

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

在任何一种情况下,即上面所说的连接和产品,如果您需要选择性列,只需编写一个表别名。例如考虑: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 是 BTW 称为表别名。

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

select distinct * 
  from table1 , table2

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

于 2015-06-17T16:09:20.787 回答
0

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

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

你也应该看看“DISTINCT”。

于 2015-06-17T16:00:26.077 回答
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
于 2015-06-19T07:54:27.310 回答