将两个表合并为一个表并删除重复项
Merge two tables to one and remove duplicates
我在同一个数据库中有 2 个表。
我想根据公共 id
列合并它们。由于表格太大我不确定是否有重复。
如何根据 id
将这两个表合并为一个表并确保没有重复?
SELECT *
FROM table1,table2
JOIN
GROUP BY id
试试联合:
https://dev.mysql.com/doc/refman/5.0/en/union.html
这很简单。希望它会有所帮助。
你也应该看看"DISTINCT"。
合并两个 table 是什么意思?您想要来自两个 table 的记录和列还是来自一个的列和来自两个的记录?
无论哪种方式,您都只需要更改连接子句。
您可以对您希望的列进行联接
SELECT DISTINCT *
FROM table1 tb1
JOIN table2 tb2
ON table1.id = table2.id
现在,如果您只需要 table1 中的列,请执行 LEFT JOIN
如果您只想要 table2 中的列,那么 RIGHT JOIN
如果您想要来自两个 table 的列,请按原样使用查询。
如果有多行具有相同的数据,DISTINCT 确保您只得到一行(但是这个 distinct 将检查一行中所有列的值,无论它们是不同的还是相同的)
如果两个 table 的列数不同,联合将无济于事。如果您不知道联接,请使用笛卡尔积
select distinct *
from table1 tb1, table2 tb2
where tb1.id = tb2.id
其中 id 是 table 之间共有的列。
在这里,如果您只需要 table1 中的列,请执行
select distinct tb1.*
如果您只需要 table2 列,则同样将上述语句中的 tb1 替换为 tb2。
select distinct tb2.*
如果你想要两者的 cols 只需写'*'
在任何一种情况下,即如果您需要 selective 列,则上面所说的连接和产品只需写一个 table 别名。例如。
考虑 :
table1 有 id、foo、bar 作为列
table2 有身份证、姓名、卷号、年龄
您只需要 select 查询结果中 table 的 id, foo, name
这样做:
select distinct tb1.id, tb1.foo, tb2.name
from table1 tb1
join table2 tb2
on tb1.id=tb2.id
笛卡尔乘积查询也是如此。 tb1、tb2 顺便说一句,被称为 table 别名。
如果您想要来自两个 table 的数据,即使它们没有任何共同点,也只需执行
select distinct *
from table1 , table2
请注意,这不能使用联接来实现,因为联接需要一个公共列才能联接'on'
我不确定你到底想要什么,但无论如何,这是你的代码
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
我在同一个数据库中有 2 个表。
我想根据公共 id
列合并它们。由于表格太大我不确定是否有重复。
如何根据 id
将这两个表合并为一个表并确保没有重复?
SELECT *
FROM table1,table2
JOIN
GROUP BY id
试试联合: https://dev.mysql.com/doc/refman/5.0/en/union.html
这很简单。希望它会有所帮助。
你也应该看看"DISTINCT"。
合并两个 table 是什么意思?您想要来自两个 table 的记录和列还是来自一个的列和来自两个的记录? 无论哪种方式,您都只需要更改连接子句。
您可以对您希望的列进行联接
SELECT DISTINCT *
FROM table1 tb1
JOIN table2 tb2
ON table1.id = table2.id
现在,如果您只需要 table1 中的列,请执行 LEFT JOIN 如果您只想要 table2 中的列,那么 RIGHT JOIN 如果您想要来自两个 table 的列,请按原样使用查询。 如果有多行具有相同的数据,DISTINCT 确保您只得到一行(但是这个 distinct 将检查一行中所有列的值,无论它们是不同的还是相同的) 如果两个 table 的列数不同,联合将无济于事。如果您不知道联接,请使用笛卡尔积
select distinct *
from table1 tb1, table2 tb2
where tb1.id = tb2.id
其中 id 是 table 之间共有的列。 在这里,如果您只需要 table1 中的列,请执行
select distinct tb1.*
如果您只需要 table2 列,则同样将上述语句中的 tb1 替换为 tb2。
select distinct tb2.*
如果你想要两者的 cols 只需写'*'
在任何一种情况下,即如果您需要 selective 列,则上面所说的连接和产品只需写一个 table 别名。例如。 考虑 : table1 有 id、foo、bar 作为列 table2 有身份证、姓名、卷号、年龄
您只需要 select 查询结果中 table 的 id, foo, name 这样做:
select distinct tb1.id, tb1.foo, tb2.name
from table1 tb1
join table2 tb2
on tb1.id=tb2.id
笛卡尔乘积查询也是如此。 tb1、tb2 顺便说一句,被称为 table 别名。
如果您想要来自两个 table 的数据,即使它们没有任何共同点,也只需执行
select distinct *
from table1 , table2
请注意,这不能使用联接来实现,因为联接需要一个公共列才能联接'on'
我不确定你到底想要什么,但无论如何,这是你的代码
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