在同一个JOIN中获得具有各种WHERE组合的结果

时间:2015-09-16 08:40:17

标签: mysql sql

我试图找出最好的方法来获取所有"搜索产品"其中包含具有指定属性的部件。这就是我现在所拥有的,但是尽管它们是具有属性/属性标题的部分,但它不会返回任何内容。

SELECT DISTINCT * FROM searchproduct
JOIN part ON searchproduct.id = part.searchproduct_id
LEFT JOIN part_attribute ON part.id = part_attribute.part_id
JOIN part_attribute ON part_attribute.id = part_attribute.part_attributeheader_id
WHERE (part_attribute.name = 'Colour' AND part_attribute.value IN ('Black')) AND (part_attribute.name = 'Size' AND part_attribute.value IN ('11'));

每个searchproduct有多个part,每个part有多个part_attribute,每个part_attribute有一个part_attributeheader,每个part_attributeheader name有一个samplesearchproduct (searchproduct) | v part B (part) | | v v "11" "Black" (part_attribute.value) | | v v "Size" "Colour" (part_attributeheader.name)

我想我可能需要添加某种分组?我尝试的一切都没有结果。

这是一个数据示例(是否有更好的方式来展示它?)

@users.each_with_index do |user, i|

1 个答案:

答案 0 :(得分:2)

我正在努力理解你的数据布局(part_attribute和part_attributeheader不同的表),但你认为你需要2个连接。这样的事情: -

SELECT DISTINCT * 
FROM searchproduct
JOIN part ON searchproduct.id = part.searchproduct_id
INNER JOIN part_attribute p0 ON part.id = p0.part_id
INNER JOIN part_attribute P1 ON p.id = P1.part_attributeheader_id
WHERE (p0.name = 'Colour' AND p0.value IN ('Black')) 
AND (P1.name = 'Size' AND P1.value IN ('11'));