我有一个表,其中有我关心的两列
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)
你可以尝试这样的事情:
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)
还有小提琴。
祝你好运。