gpt4 book ai didi

MySQL 在匹配多个条件的一对多关系中苦苦挣扎

转载 作者:可可西里 更新时间:2023-11-01 07:54:50 24 4
gpt4 key购买 nike

我有两张表,大致如下:

products            product_attributes
================== ========================================
| id | name | | id | product_id | attribute | value |
================== ========================================
| 1 | product 1 | | 1 | 1 | size | big |
| 2 | product 2 | | 2 | 1 | colour | red |
| 3 | product 3 | | 3 | 2 | size | medium |
| 3 | product 3 | | 4 | 2 | age_range | 3-5 |
| .. | ... | | 5 | 2 | colour | blue |
================== | 6 | 3 | size | small |
| .. | ... | ... | ... |
========================================

产品可能有无限数量的属性,这就是为什么将它们保存在单独的表中的原因。

我希望能够提取出与多个(也是无限的)属性条件匹配的不同产品,但我想不出如何在不使用 OR 条件的情况下做到这一点,然后进行某种计数来检查所有属性是否匹配.我相当确定这不是最好的方法,所以希望有人能提供帮助?!

例如,查找尺寸 = 'medium' 和颜色 = 'blue' 的产品(这将匹配上例中的产品 2)。

最佳答案

这是一个 relational division问题。

您使用COUNT 建议的方式可能是 MySQL 中最简单的方式

SELECT product_id
FROM product_attributes pa
WHERE (attribute='size' and value='medium')
OR (attribute='colour' and value='blue')
GROUP BY product_id
HAVING COUNT(DISTINCT CONCAT(attribute,value) ) = 2

链接文章中还有另一种使用双 NOT EXISTS 的方法,但由于 MySQL 不支持 CTE,这将非常麻烦。

关于MySQL 在匹配多个条件的一对多关系中苦苦挣扎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4326561/

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