19

クエリの結果が文字列のペア (x, y) のリストを返すことになっているとしましょう。逆の重複を排除しようとしています。つまり、(x, y) が結果の 1 つだった場合、(y, x) は後で表示されるべきではありません。

例:

column 1 (foreign key)    column 2 (int)     column 3 (string)
4                         50                 Bob
2                         70                 Steve 
3                         50                 Joe

この表に示されている人物は、異なる列 2 の値で複数回表示される可能性があります。

私のクエリは、同じ列 2 の値を持つ名前のすべてのペアを出力する必要があります。

select e.column3, f.column3 from example as e, example as f where e.column2 = f.column2 

(Bob, Bob)
(Bob, Joe)
(Joe, Bob)
(Joe, Joe)

double を削除するようにクエリをアップグレードしました。

select e.column3, f.column3 from example as e, example as f where e.column2 = f.column2
       and e.column3 <> f.column3

(Bob, Joe)
(Joe, Bob)

今、私はそれを返すだけにしたい:

(Bob, Joe). 

(Joe, Bob) は逆の重複なので、結果に含めたくありません。1つのクエリでそれを処理する方法はありますか?

4

2 に答える 2

32

まず、2012 年へようこそ。カンマを使用した関連テーブルから移行しました。ANSI 89 で導入されましたが、大幅に不足しています。現在、正しい方法は、ANSI 92/99/2003 JOIN 構文を使用してクエリを記述することです。

問題の解決策は、双方向の不等式<>一方向の不等式に変えること<です>

select e.column3, f.column3
from example as e
join example as f on e.column2 = f.column2 and e.column3 < f.column3
于 2012-10-24T01:41:17.703 に答える
1
select e.column3, f.column3 from example as e, example as f where e.column2 = f.column2
       and e.column3 <> f.column3 where e.id < f.id

単純な where 句を追加することでそれを行う必要があります。

于 2012-10-24T01:40:16.360 に答える