1

I have a table having columns id and name

in my table 3 records present

id       name 
1        Chinmoy
2        Amit
3        Bhagi

I want result

name1     name2 
Amit      Bhagi
Amit      Chinmoy
Bhagi     chinmoy

I tried and succeeded up to this

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

by using this query

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

Now i didn't get how to do.

I have to eliminate the record which are already present in opposite order.

Please Help

Thanks in advance

4

2 回答 2

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 ║
╚═══════╩═════════╝
于 2013-03-25T13:58:03.567 回答
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)。因为当 a < b 时,a 绝对不等于 b,并且它还会对您的名字进行排序,因此如果 Amit < Bhagi 为真,则相反的情况不正确,您也不会得到 Bhagi - Amit。

于 2013-03-25T13:54:23.147 回答