SQL 查询 return 从许多表中统计结果

SQL query which return counted results from many tables

我有两个表 'shops' 和 'products'。商店有很多产品,产品属于一个商店。而且产品属于唯一的一个类别。我有 3 个类别的 ID(例如 1、2、3)。我怎样才能让所有商店的产品都属于所有 3 个类别?

我试过了

SELECT distinct s.*
from shops s
left join products p on p.shop_id = s.id
where p.category_id in (1,2,3)

但是这个 returns 商店有属于类别 1 或 2 或 3 的产品但是我想要属于所有 3 个类别的产品,例如 1 AND 2 AND 3,所以每个商店都必须有至少 3 个产品

按每个店铺return使用分组

SELECT distinct s.*
from shops s
left join products p on p.shop_id = s.id
where p.category_id in (1,2,3)
group by s.id
having count(distinct p.category_id) = 3

您可以检查 s.id 有 count(distinct p.category_id) = 3

SELECT  s.id 
from shops s
inner join products p on p.shop_id = s.id
where p.category_id in (1,2,3)
group by s.id
having count(distinct p.category_id) = 3
SELECT s.*
  from shops s
  join products p 
    on p.shop_id = s.id
 where p.category_id in (1,2,3)
 Group 
    by s.id
Having count(distinct p.category_id) = 3

或类似的东西

试试这个?

SELECT DISTINCT A.ID FROM SHOPS A, PRODUCTS B
WHERE A.ID = B.SHOP_ID AND EXISTS (SELECT COUNT(1) FROM PRODUCTS C, PRODUCTS D, PRODUCTS E WHERE B.ID = C.ID AND C.ID = D.ID AND D.ID = E.ID AND C.CATEGORY_ID = 1 AND D.CATEGORY_ID = 2 AND E.CATEGORY_ID = 3) 

我的 T-SQL 已经生锈了,这假设我得到了正确的关系,例如商店 1 - M 产品,我不确定类别是否是一个实体,但类别 1 - M 产品。此外,对于未来的工作,我发现当您的实体是名称单数名词时它会有所帮助,但这只是我的偏好。祝你好运。