1

データベースに単純な m 対 n のテーブルがあり、AND 検索を実行する必要があります。表は次のようになります。

column a | column b
1          x
1          y
1          z
2          x
2          c
3          a
3          b
3          c
3          y
3          z
4          d
4          e
4          f
5          f
5          x
5          y

「列 B に x AND y がある列 A をください (ここでは 1 と 5 を返す)」と言いたいのですが、そのクエリを作成する方法がわかりません。

試してみSELECT column_a FROM table WHERE column_b = x AND columb_b = yましたが、列が何らかの形で両方である場合にのみ返されるようです。基本的に可能ですか、それとも別のテーブルレイアウトにする必要がありますか?

4

3 に答える 3

1

これは、「set-within-sets」サブクエリの例です。私group byはロジックを使用してhaving句に入れるのが好きです:

select column_a
from table
group by column_a
having sum(case when column_b = x then 1 else 0 end) > 0 and
       sum(case when column_b = y then 1 else 0 end) > 0;

句の eachsum()having、条件の 1 つに一致する行の数をカウントしています。

これは非常に一般的であることがわかります。zしたがって、句を追加するだけで確認できます。

select column_a
from table
group by column_a
having sum(case when column_b = x then 1 else 0 end) > 0 and
       sum(case when column_b = y then 1 else 0 end) > 0 and
       sum(case when column_b = z then 1 else 0 end) > 0;

orまたは、の代わりに使用して、「x」または「y」にしandます。

select column_a
from table
group by column_a
having sum(case when column_b = x then 1 else 0 end) > 0 or
       sum(case when column_b = y then 1 else 0 end) > 0;
于 2013-08-18T16:24:49.497 に答える
1

1 つの方法を次に示します。

SELECT a
FROM Table1
WHERE b IN ('x', 'y')
GROUP BY a
HAVING COUNT(DISTINCT(b)) = 2

SQL フィドル

(a,b) が一意であることが保証されている場合は、DISTINCT も削除できます。

于 2013-08-18T16:27:18.897 に答える