我有一张表格如下。
+------------+-------------+---------+
| productid | attributeid | valueid |
+------------+-------------+---------+
| 1011052312 | 331100 | 1543697 |
| 1011052312 | 33113319 | 1534108 |
| 1011098009 | 33129 | 2655849 |
| 1011052380 | 331100 | 1543697 |
| 1011052380 | 33113319 | 1233908 |
+------------+-------------+---------+
现在我只需要获取那些具有非常精选的属性值对的productid
。比方说,我需要获取属性331100
的值为1543697
且属性33113319
的值为1534108
的产品。产品1011052312
满足此条件。
需要注意的一点是,我应该避免多个连接,因为我需要匹配一长串属性。对于每个属性,可以有任意数量的可能值。
答案 0 :(得分:1)
这是一个常见问题,选择所有匹配至少一个属性的产品,对它们进行分组,计算每个产品的属性数量,然后使用HAVING
子句仅选择具有所有属性的产品。像这样:
SELECT productid
FROM table
WHERE (attributeid=331100 and valueid=1543697)
OR (attributeid=33113319 and valueid=1534108)
GROUP BY productid
HAVING COUNT(*) = 2
答案 1 :(得分:0)
另一种说同样事情的方式 - 我无法记住EXPLAIN是否相同,所以这可能会更慢......
SELECT productid
FROM my_table
WHERE (attributeid,valueid) IN ((331100,1543697)
,(33113319,1534108)
)
GROUP
BY productid
HAVING COUNT(*) = 2;