我不知道从哪里开始!
我有一个product
表和一个product_attributes
表。每个产品都可以有多个属性。
如果我们只使用2个属性来保持简单(id 1 = size,id 2 = color),product_attributes
表如下所示:
id product_id attribute_id value
======================================
1 1 1 10
2 1 2 Red
3 1 1 12
4 1 2 Red
5 2 1 10
6 2 2 Blue
所以这里我们有2个产品,第一个有2个尺寸(10和12)都是红色。第二个是10号蓝色。
我想找到所有尺寸相等的产品(10 OR 12) AND 颜色为红色。
SELECT * FROM product p INNER JOIN product_attribute a ON a.product_id = p.id WHERE (a.value = '10' OR a.value = '12') AND (a.value = 'red')
上面的内容显然不会起作用,但会让我知道我之后会发生什么。我很确定我需要在这里某处计算(点击次数= 2)但我不知道从哪里开始。
任何帮助表示感谢。
答案 0 :(得分:1)
这样的事情应该有效:
SELECT *
FROM product p
WHERE EXISTS (SELECT *
FROM product_attribute pa1
WHERE pa1.product_id = p.id
AND pa1.value in ('10', '12'))
AND EXISTS (SELECT *
FROM product_attribute pa2
WHERE pa2.product_id = p.id
AND pa2.value = 'Red')
@SalmanA问的问题仍然适用。
答案 1 :(得分:0)
您可以使用子查询:
SELECT *
FROM product p
INNER JOIN product_attribute a ON a.product_id = p.id
WHERE a.value = '10' OR a.value = '12'
AND p.id IN (
SELECT p.id
FROM product p
INNER JOIN product_attribute a ON a.product_id = p.id
WHERE a.value = 'red'
)