Я пытаюсь получить несколько атрибутов (например, спальни, ванные комнаты и т. д.) из нескольких таблиц. Да, я могу получить только один атрибут с моим текущим запросом. Что мне не хватает?
В конечном итоге я пытаюсь найти объект property_id с 2 ванными комнатами и 2 спальнями. В этом случае мои желаемые результаты - это идентификаторы свойств 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')
Но что я должен сделать, чтобы получить результаты с большим количеством атрибутов (например, ГДЕ имя, например «ванные комнаты», И среднее значение, например «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
Это делает использование самосоединения.