いくつかのテーブルから複数の属性(寝室、バスルームなど)を取得しようとしています。はい、現在のクエリでは1つの属性しか取得できないようです。私は何が欠けていますか?
私が最終的に見つけようとしているのは、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')
しかし、より多くの属性(たとえば、「bathrooms」のようなa.nameと「2」のようなav.value)で結果を得るには、何をする必要がありますか?main 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
これにより、自己結合が使用されます。