3

初心者の SQL クエリに関する質問: Oracle SQL Developer を使用しています。

私はテーブルを持っています:

<name>  <color>
steve    red
mark     red
steve    green
john     red
ryan     red

私がやりたいのは、結果の色の列に RED を含む名前のみを表示することです。
結果は次のようになります。

     mark
     john
     ryan

スティーブも緑色なので、表示されません。

誰か知ってる?

編集:
回答ありがとうございます。結果で「赤で他の色はありません」と言うべきだったことがわかります。混乱して申し訳ありませんが、超迅速な返信をありがとうございます!

4

6 に答える 6

2

楽しみのために、ウィンドウ関数を使用したソリューションを次に示します。

select *
from (
  select name, 
         color, 
         count(distinct color) over (partition by name) as color_cnt
  from the_table
) t
where color = 'red' 
and color_cnt = 1;

SQLFiddle: http://sqlfiddle.com/#!4/d267e/3

ほとんどの場合、テーブルに対する単一のスキャンのみが必要になるため、これはサブ選択を使用するソリューションよりも高速である可能性があるというわずかな変更があります (ただし、他のソリューションでは、カラー列のインデックスを使用して 2 つを作成できる可能性があります)。シングルスキャンより安価なスキャン)

于 2012-08-27T22:16:01.500 に答える
2

WHERE句とNOT IN.

SELECT name
FROM yourTable
WHERE color = 'red'
   AND name NOT IN (
                    SELECT name
                    FROM yourTable
                    WHERE color <> 'red'
                )

SQL Fiddle with Demoを参照してください

WHEREまたは、次のように使用できますNOT EXISTS

SELECT name
FROM yourTable t1
WHERE color = 'red'
   AND NOT EXISTS (
                    SELECT  t2.name
                    FROM yourTable t2
                    WHERE  t2.color <> 'red'
                     AND t1.name = t2.name
                )

SQL Fiddle with Demoを参照してください

于 2012-08-27T21:53:02.240 に答える
1

これでうまくいくはずです誰もがあなたのためにフィドルを持っています

select t.name from t
join 
   (select name,count(1) cnt from t
     group by name
      having count(1) = 1) n
      on t.name = n.name
于 2012-08-27T21:56:17.217 に答える
1
SELECT name
FROM yourTable
WHERE color = 'red'
and name not in (
SELECT name
FROM yourTable
WHERE color != 'red')
于 2012-08-27T21:53:57.593 に答える
1
SELECT DISTINCT name
FROM mytable
WHERE color = 'red'
AND name NOT IN (
    SELECT DISTINCT name
    FROM mytable
    WHERE color <> 'red'
)
于 2012-08-27T21:54:03.890 に答える
0

これがあなたが望むものだと思います:

SELECT DISTINCT <name> 
FROM <table> 
WHERE <color> = 'red'
AND <name> NOT IN (SELECT DISTINCT <name> 
                     FROM <table> 
                     WHERE <color> != 'red')
于 2012-08-27T21:53:01.410 に答える