繁体   English   中英

选择枢轴具有所有ID的行

[英]Select rows where pivot has ALL ids

案例 :我希望所有具有company_id 8和13的公司,但只有它们具有所有product_id(1,2,4,8)的公司。

问题 :company_id 13没有product_ids 4和8,但仍显示在查询结果中,如下所示。 如果cp.product_id IN(1,2,4,8)拥有这些值之一,则好像返回公司,但是我需要它们在数据透视表company_products中具有所有这些值。

SELECT
    c.id as company_id,
    cp.product_id
FROM
    `companies` as c
    LEFT JOIN `company_products` cp ON cp.company_id = c.id
WHERE
    c.id IN (8, 13)
    AND cp.product_id IN (1,2,4,8)
GROUP BY
    c.id

我的猜测是我应该使用IN以外的其他东西,但是我的研究并未引导我找到正确的解决方案。 感谢您的帮助。

您可以在查询中添加一个having子句,以确保每组c.id都具有全部四个cp.product_id:

SELECT
    c.id as company_id
FROM
    `companies` as c
    LEFT JOIN `company_products` cp ON cp.company_id = c.id
WHERE
    c.id IN (8, 13)
    AND cp.product_id IN (1,2,4,8)
GROUP BY
    c.id
HAVING COUNT(DISTINCT cp.product_id) = 4;    

示例SQL提琴

如果您还需要产品详细信息,则可以将以上查询用作派生表,并将其与产品表联接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM