2017-08-09 1 views
2

私は単独の個人だけが使用する色を取得しようとしています。次のサンプルデータを使用して:私は色、名前によってテーブル グループから重複をフィルタリングした後に一意の値を持つ行を選択する

SELECT色、名前 との重複を処分した

+---------+-------------+ 
| color | name  | 
+---------+-------------+ 
| red  | Jane  | 
| red  | Jane  | 
| red  | Bob   | 
| blue | David  | 
| blue | Bill  | 
| green | Jack  | 
| green | Jack  | 
| purple | Jack  | 
| orange | Dan   | 
+---------+-------------+ 

を。

+---------+-------------+ 
| color | name  | 
+---------+-------------+ 
| red  | Jane  | 
| red  | Bob   | 
| blue | David  | 
| blue | Bill  | 
| green | Jack  | 
| purple | Jack  | 
| orange | Dan   | 
+---------+-------------+ 

私は一人だけがその色に関連付けられていたという理由だけで、緑、紫、オレンジの私の目的の結果セットに、さらにそれを絞り込むために何が必要ですか?

+0

ご迷惑をおかけして申し訳ございません。 '他の色と異なる名前を持たない色ではどういう意味ですか? 'なぜ「オレンジ」が含まれていますか? –

+0

まったく別の名前を持つ色を意味しますか? –

+0

@DavyM:はい、混乱のために申し訳ありません。私はそれを記述するための非常に具体的な方法を考えようとしていました。私は以来、この質問を編集しました。 –

答えて

2

これを達成するには、クエリでさらにステップを進めます。あなたが持っているものをサブクエリとして取り出し、それを各色ごとに表示された別個の名前の数を数える2番目のサブクエリのソースとして使用します。次に、一意の名前の数が1だった結果セットから選択されます。

SELECT color 
FROM (SELECT color, COUNT(name) namecount FROM (SELECT color, name 
      FROM table GROUP BY color, name) t1 
     GROUP BY color) t2 
WHERE namecount = 1 
+0

サブクエリにエイリアスを追加した後、正しい色が返されますが、その色に対応する名前列はどこに追加しますか? –

+0

元のクエリの 'INNER JOIN 'を使用してください。色には、SELECT FROM table GROUP BY color、name'という名前を付けてください。その結果、最終的なリストに含まれていた色だけが単一の名前のレコードになります。 – SandPiper

関連する問題