朋友。 Mysql DB有4个表 products,product_properties,properties,property_values
产品
|Id|name|
|1 |Book1|
|2 |Book2|
|3 |Book3|
...
属性
|Id|name|
|1 |Color|
|2 |Binding|
...
property_values
|Id|property_id|value |
|1 |1 | red |
|2 |1 | orange|
|3 |1 | green |
|4 |2 | soft |
|5 |2 | hard |
product_properties
|Id|product_id|property_id| value |
|1 |1 |1 | 1
|2 |1 |2 | 4
|3 |2 |1 | 1
|4 |2 |2 | 4
|5 |3 |1 | 2
我需要获得一个颜色为红色且结合柔和的产品列表。但我很困惑。
select products.id from products
join product_properties on product_properties.product_id = products.id
join properties on properties.id = product_properties.property_id
join property_values on property_values.id = product_properties.value
where properties.name = 'Color' and property_values.value = 'red'
and properties.name = 'Binding' and property_values.value = 'soft'
......没有工作......
答案 0 :(得分:1)
你非常接近:
select pp.id
from product_properties pp join
properties p
on p.id = pp.property_id join
property_values pv
on pv.id = pp.value
where (p.name = 'Color' and pv.value = 'red') or
(p.name = 'Binding' and pv.value = 'soft')
group by pp.id
having count(distinct p.name) = 2;
注意:我删除了products
表,因为查询不需要它。
选择符合条件的属性。然后它选择有两个匹配的产品。
答案 1 :(得分:-1)
我会将连接写为INNER JOIN。我工作的次数最多,工作正常。
SELECT p.id
FROM products p
INNER JOIN product_properties r ON (p.id = r.property_id)
WHERE r.value ='red'
它不是你的完整查询,但我希望我能理解:-)
答案 2 :(得分:-1)
你的陈述很好......检查here
答案 3 :(得分:-1)
试试这个,伙计。
SELECT
*
FROM
products
WHERE
Id IN (
SELECT
DISTINCT(pdc.id) AS product_id
FROM
products pdc
INNER JOIN product_properties pp ON (pp.product_id = pdc.Id)
INNER JOIN properties prop ON (prop.Id = pp.property_id)
INNER JOIN property_values ppv ON (ppv.Id = pp.value)
WHERE
pp.value = 1
) AND
Id IN (
SELECT
DISTINCT(pdc.id) AS product_id
FROM
products pdc
INNER JOIN product_properties pp ON (pp.product_id = pdc.Id)
INNER JOIN properties prop ON (prop.Id = pp.property_id)
INNER JOIN property_values ppv ON (ppv.Id = pp.value)
WHERE
pp.value = 4
)
PS。在该建模下,您不需要表product_properties上的property_id列。