1

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;

今、私はやり方がわかりませんでした。

すでに逆の順序で存在しているレコードを削除する必要があります。

助けてください

前もって感謝します

4

2 に答える 2

4

基本的に、2つのテーブルの積からの結果を次のようにフィルタリングできます。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 に答える