2013-03-25 64 views
1

去除重复行我有列编号和名称如何从联接查询在MySQL

表中

id  name 
1  Chinmoy 
2  Amit 
3  Bhagi 

我想引起我的表3的记录本

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; 

现在我没有得到如何做。

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

请帮助

在此先感谢

回答

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 ║ 
╚═══════╩═════════╝ 
+0

是它的工作正常。 可以请你向我解释查询a.Name user1926138 2013-03-25 14:03:04

+0

很高兴听到.. – 2013-03-25 14:04:05

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)。因为当一个< b,a绝对不等于b,并且它会对你的名字进行排序,所以如果Amit < Bhagi是真的,反过来就不是真的,你也不会得到Bhagi - Amit。

+0

@tombom好点来自这两个表的产品筛选的结果!我将更新 – jurgenreza 2013-03-25 13:59:33

+0

@ user1926138以您的示例给出的答案满足要求。 +1 – fancyPants 2013-03-25 14:02:49

+0

@ user1926138它会给你完全相同的结果。尝试一下。 – jurgenreza 2013-03-25 14:04:08