SQL排除内连接表

Mat*_*ake 0 sql inner-join

我有一个表,其中有我关心的两列

Business_ID   /   Product type
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个 SQL 查询来仅获取销售一种类型的企业,而不获取其他类型的企业。所以表中填充的是

B_ID    prod_type
123  |   A
123  |   A
123  |   B
234  |   A
234  |   C
234  |   C
456  |   A
456  |   D
789  |   A
Run Code Online (Sandbox Code Playgroud)

这样的例子不胜枚举。我正在尝试编写一条 SQL 语句,该语句将找到一个出售 prod_type A 而不是 prod_type B、C、D 的 B_ID。这是我正在尝试的,但它不起作用

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
Run Code Online (Sandbox Code Playgroud)

我还找到了如何使用外部联接来排除,但由于它是同一个表,我无法这样做,除非有一种方法可以在进行联接之前选择出 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
Run Code Online (Sandbox Code Playgroud)

sge*_*des 5

你可以尝试这样的事情:

SELECT DISTINCT p.BusinessId
FROM phop p
   LEFT JOIN phop p2 ON p.BusinessId = p2.BusinessId AND p2.Product_Type <> 'A'
WHERE p2.BusinessId IS NULL
Run Code Online (Sandbox Code Playgroud)

还有小提琴

祝你好运。