gpt4 book ai didi

Mysql group by 具有内连接的多列

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

我有 3 个表:productsproductscategoriescategories

productscategories 是一个多对多表,仅包含其他两个表的 ID 号。

没有分组依据的结果如下所示:

id | Url                   | Category
-------------------------------------
1 | http://example.com/12 | hat
2 | http://example.com/12 | shoe
3 | http://example.com/13 | hat
4 | http://example.com/13 | jacket
5 | http://example.com/14 | hat
6 | http://example.com/14 | socks

现在我想排除具有相同 url 的每一行(如果它包含任何选定的类别),在本例中是 jacketshoe .

不需要的结果如下所示:

id | Url                   | Category
-------------------------------------
1 | http://example.com/12 | hat
3 | http://example.com/13 | hat
5 | http://example.com/14 | hat

因为 id 13 的 url 包含 jacket 我不希望它在那里。对于 14 的 url 也是如此,其中包括 shoe

这是准确的,因为我有多个类别和多个彼此不知道的网址。

上面的sql:

SELECT * FROM products
JOIN productscategories ON products.id = productscategories.product_id
JOIN categories ON categories.id = productscategories.category_id
WHERE categories.slug NOT IN (
'shoe',
'jacket',
)
GROUP BY products.image_url

想要的结果:

id | Url                   | Category
-------------------------------------
5 | http://example.com/14 | hat

如何进行 sql 查询,使 url 能够识别类别,如上面所示?

最佳答案

SELECT * FROM products
JOIN productscategories ON products.id = productscategories.product_id
JOIN categories ON categories.id = productscategories.category_id
GROUP BY products.image_url
HAVING sum( categories.slug IN('shoe','jacket') )=0

categories.slug IN('shoe','jacket') - 如果类别在集合中,则返回 1,否则返回 0。 sum() - 返回组中鞋子/夹克的数量。 HAVING 过滤器组,其中包含鞋子/夹克。

关于Mysql group by 具有内连接的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40039977/

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