如何从mysql中的连接查询中删除重复的行

时间:2013-03-25 13:50:48

标签: mysql sql join

我有一个包含列id和名称

的表

在我的表3记录中

id       name 
1        Chinmoy
2        Amit
3        Bhagi

我想要结果

name1     name2 
Amit      Bhagi
Amit      Chinmoy
Bhagi     chinmoy

我尝试过并成功了

name1    name2
Amit     Bhagi
Amit     Chinmoy
Bhagi    Amit
Bhagi    Chinmoy
Chinmoy  Amit
Chinmoy  Bhagi

使用此查询

select tbl1.name,tbl2.name from test tbl1 
join test tbl1 on tbl1.name != tbl2.name
order by tbl1.name,tbl2.name;

现在我没有得到怎么做。

我必须删除已经按相反顺序出现的记录。

请帮助

提前致谢

2 个答案:

答案 0 :(得分:4)

基本上,您可以通过a.Name < b.Name

过滤两个表格的产品结果
SELECT  a.Name Name1, b.Name Name2
FROM    TableName a, TableName b
WHERE   a.Name < b.Name
ORDER   BY Name1, Name2

输出

╔═══════╦═════════╗
║ NAME1 ║  NAME2  ║
╠═══════╬═════════╣
║ Amit  ║ Bhagi   ║
║ Amit  ║ Chinmoy ║
║ Bhagi ║ Chinmoy ║
╚═══════╩═════════╝

答案 1 :(得分:2)

试试这个:

select tbl1.name as n1, tbl2.name as n2 from test tbl1 
join test tbl2
on tbl1.name < tbl2.name
order by tbl1.name, tbl2.name;

<强>解释

您可以添加条件tbl1.name < tbl2.name以消除重复值。这样您就不需要已有的连接条件(tbl1.name != tbl2.name)。因为当&lt; b,a绝对不等于b,它也会对你的名字进行排序,以便在Amit&lt; Bhagi是对的,事实并非如此,你也不会得到Bhagi - Amit。