gpt4 book ai didi

mysql - 如果输入列表中存在所有相关值,如何仅包含结果

转载 作者:行者123 更新时间:2023-11-29 11:29:02 25 4
gpt4 key购买 nike

我有一个对象Product,它有许多Tag。我想编写一个查询,给定 Tag id 列表,如果所有产品的标签都包含在输入列表中,则仅返回 Product 。输入列表可能具有不属于产品一部分的标签 ID,但这没关系,产品仍然可以返回(即所有产品的标签必须作为输入列表的子集存在才能包含在结果中)。

我能够编写 1 个查询来完成此任务,但我真的希望能够在没有 JOIN 中的子查询的情况下完成此任务。这就是我所拥有的:

SELECT *
FROM product
LEFT JOIN product_tag ON product_tag.product_id = product.id
LEFT JOIN (
SELECT product.id, COUNT(*) AS record_count
FROM product
LEFT JOIN product_tag ON product_tag.product_id = product.id
GROUP BY product.id
) AS inner_q ON inner_q.id = product.id
WHERE product_tag.id in (1, 2, 3) -- Sample Tag ids
GROUP BY product.id
HAVING COUNT(*) = inner_q.record_count

最佳答案

这能为您带来所需的结果吗?

select * from product 
where id in
(select product_id
from product_tag
group by product_id
having sum(case when id in (1, 2, 3) then 1 else 0 end) >= 3)

关于mysql - 如果输入列表中存在所有相关值,如何仅包含结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37730723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com