関心のある2つの列を持つテーブルがあります
Business_ID / Product type
あるタイプを販売し、他のタイプを販売しないビジネスのみを取得する SQL クエリを作成しようとしています。したがって、テーブルには
B_ID prod_type
123 | A
123 | A
123 | B
234 | A
234 | C
234 | C
456 | A
456 | D
789 | A
そしてリストは延々と続きます。prod_type B、C、D ではなく、prod_type A を販売する B_ID を見つける SQL ステートメントを作成しようとしています。
SELECT phop_1.Business_id, phop_1.PRODUCT_TYPE, count(*)
FROM phop phop_1, phop phop_2
WHERE phop_1.Business_id = phop_2.Business_id
AND phop_1.PRODUCT_TYPE = 'A'
AND NOT phop_2.PRODUCT_TYPE = 'B'
GROUP BY phop_1.Business_id, phop_1.PRODUCT_TYPE
外部結合を使用して除外する方法も見つけましたが、同じテーブルであるため、結合を行う前に prod_type A を選択する方法がない限り、それを行うことはできません。
select phop_1.Business_id, phop_1.PRODUCT_TYPE, count(*)
from phop phop_1
LEFT OUTER JOIN phop phop_2
ON phop_1.Business_id = phop_2.Business_id
WHERE phop_2.Business_id IS NULL
GROUP BY phop_1.Business_id, phop_1.PRODUCT_TYPE