我正在尝试从几张表中获取多个属性(例如卧室、浴室等),是的,我当前的查询似乎只能获得一个属性。我错过了什么?
我最终想要找到的是带有 2 间浴室和 2 间卧室的 property_id。在这种情况下,我想要的结果是属性 id 的 1 和 4。
这是我在sqlfiddle上的示例
示例表:
property
--------
id
1
2
3
4
attribute
---------
id name
1 bedrooms
2 bathrooms
attribute_value
---------------------
id attribute_id value
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 2 3
property_attributes
------------------------------
property_id attribute_value_id
1 2
1 5
2 2
2 4
3 1
3 4
4 2
4 5
如果我只想查看基于单个属性的查询,则此查询可以产生我想要的结果:
SELECT p.property_id
FROM property p
INNER JOIN property_attribute pa ON p.property_id = pa.property_id
INNER JOIN property_area pc ON p.property_id = pc.property_id
WHERE pa.attribute_value_id
IN (
SELECT av.attribute_value_id
FROM attribute_value av
INNER JOIN attribute a ON av.attribute_id = a.attribute_id
WHERE a.name like 'bedrooms' AND av.value like '2')
但是我必须怎么做才能获得更多属性的结果(例如 WHERE a.name like 'bathrooms' AND av.value like '2')?如果我在主 where 子句中添加另一个子查询,它不会返回任何结果。
///编辑///
如果其他人遇到这种情况,这是对我有用的解决方案:
SELECT p.property_id
FROM property p
INNER JOIN property_attribute pa ON p.property_id = pa.property_id
INNER JOIN property_attribute pa2 ON p.property_id = pa2.property_id
INNER JOIN property_attribute pa3 ON p.property_id = pa3.property_id
WHERE pa.attribute_value_id = 2
AND pa2.attribute_value_id = 5
AND pa3.attribute_value_id = 7
这使得使用self-join。