MySQL - SELECT,其中多个字段必须为true

时间:2016-03-03 09:47:02

标签: mysql

我不知道从哪里开始!

我有一个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)但我不知道从哪里开始。

任何帮助表示感谢。

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'    
)