1

次のテーブルがあるとしましょう

name | color
-------------
jon    blue
jon    black
jon    red
bill   blue
bill   red
jack   blue
....

色=青と赤のみのすべての名前と、色=青のみのすべての名前のqeyryに対して同じことを取得するクエリを実行したいと思います(黒も赤もありません)

私は以下のようなものを試しました

select name, color from table where color in ('blue', 'red')
group by name, color

しかし、予想以上の結果が得られます...何かアイデアはありますか?

ありがとう !

4

2 に答える 2

0

このクエリを試してみましょう:

SELECT name, color
FROM table1
WHERE name IN
(
    SELECT name
    FROM table1 t1
    WHERE color IN ('blue', 'red')
      AND NOT EXISTS
      (
         SELECT * 
         FROM table1 t2 
         WHERE t1.name = t2.name
           AND t2.color NOT IN ('blue', 'red')
       )
    GROUP BY name
    HAVING COUNT(DISTINCT color) = 2 --to be sure only red won't be accepted

    UNION

    SELECT name
    FROM table1 t1
    WHERE color = 'blue'
     AND NOT EXISTS
     (
        SELECT * 
        FROM table1 t2 
        WHERE t1.name = t2.name
          AND t2.color <> 'blue'
     )
)
ORDER BY name, color
于 2012-11-15T03:11:13.810 に答える
0
  select name
    from tbl
   where color in ('blue','red')
     and not exists (select * from tbl t2
                     where t2.name=tbl.name and t2.color NOT IN ('blue','red'))
group by name
  having count(distinct color) = 2
于 2012-11-15T01:27:49.540 に答える