0

こんにちは、SQL クエリのヘルプが必要です。結果は、行全体で 1 つの列の値と一致する必要があります。ここに例があります。本、文具、おもちゃなどの商品をすべて販売している店舗を探す必要があります。

Store Items
----- --------
AA     PERFUMES
AA     TOYS
BB     STATIONERY
BB     BOOKS
BB     TOYS

上記の例では、「BB」がすべての基準に一致する唯一のストアであるため、クエリから期待される結果になります。

AND 演算子 ( select store from storeitem where items = 'books' and items ='toys' and items='stationery';) を使用してクエリを実行しようとしましたが、すべての値が同じ行にあり、 in 演算子 ( select store from storeitem where items in ('books','stationery','toys');) を使用しているため、すべての値の基準に一致する必要がないため、機能しませんでした。これについてあなたの助けが必要です。

4

4 に答える 4

3

サブクエリの使用をすべてスキップし、HAVING DISTINCT句を使用して必要なストアを返すことができます。

SELECT  store, COUNT(*)
FROM    your_table
WHERE   items in ('STATIONAIRY', 'BOOKS', 'TOYS')
GROUP BY
        store
HAVING  COUNT(DISTINCT items) = 3
;

WITH your_table as (
  SELECT 'AA' as Store, 'PERFUMES' as Items FROM dual UNION ALL
  SELECT 'AA', 'TOYS' FROM dual UNION ALL
  SELECT 'BB', 'STATIONAIRY' FROM dual UNION ALL
  SELECT 'BB', 'BOOKS' FROM dual UNION ALL
  SELECT 'BB', 'TOYS' FROM dual
)
SELECT  store, COUNT(*)
FROM    your_table
WHERE   items in ('STATIONAIRY', 'BOOKS', 'TOYS')
GROUP BY
        store
HAVING  COUNT(DISTINCT items) = 3
;
于 2013-02-28T11:43:17.673 に答える
2
select store
from (
  select distinct store, items
  from your_table
  where items in ('books','stationery','toys')
)
group by store
having count(0) = 3
于 2013-02-28T11:11:19.017 に答える
1

これは、動作するはずの一般的なアプローチです (特に Oracle ではテストされていません)。

select store from (
  select store,
         max(case when items = 'stationery' then 1 else 0 end) as has_stationery,
         max(case when items = 'books'      then 1 else 0 end) as has_books,
         max(case when items = 'toys'       then 1 else 0 end) as has_toys
    from your_table
    group by store
  ) as stores_by_item
  where has_stationery = 1 and has_books = 1 and has_toys = 1
于 2013-02-28T11:02:14.657 に答える
0

あなたの質問を正しく理解していれば、そのクエリが必要でした:

Select store from storeitem where store in (select store from storeitem where items = 'books')

AND store in (items ='toys' の storeitem から store を選択)

AND store in (items='stationairy' の storeitem から store を選択)

于 2013-02-28T12:05:16.937 に答える