web-dev-qa-db-ja.com

複数の条件でのMySQL Join

私はSQLクエリ、実際には単純なクエリに問題がありますが、何が欠けているのかわかりませんので、あなたの助けを求めるようになりました...だから、私がしなければならないこと

2つのテーブルroomsrooms facilities...そして、私は希望の設備を備えた部屋を選択する必要があります。

1つの施設(id = 4の施設-id_fu-)がある部屋を選択した場合...次のクエリを使用して

SELECT u.* FROM rooms u 
JOIN facilities_r fu 
ON fu.id_uc = u.id_uc 
    AND fu.id_fu = '4' 
WHERE 1 
    AND vizibility='1' 
GROUP BY id_uc 
ORDER BY u_premium desc, id_uc DESC 

全部大丈夫。

しかし、より多くの施設がある部屋を選択したい場合は、次のクエリを使用して、id = 4、id = 3の施設としましょう。

SELECT u.* FROM room u 
JOIN facilities_r fu 
ON fu.id_uc=u.id_uc 
    AND fu.id_fu = '4' 
    AND fu.id_fu = '3' 
WHERE 1 
    AND vizibility = '1' 
GROUP BY id_uc 
ORDER BY u_premium DESC, id_uc DESC 

機能しません。

なぜ機能しないのか理解できませんが、条件の付け方がわかりません...

ありがとう、ミハイ

55
Mihai Stancioiu

条件を括弧でグループ化できます。フィールドが別のフィールドと等しいかどうかを確認するときは、ORを使用します。たとえば、WHERE a='1' AND (b='123' OR b='234')

SELECT u.*
FROM rooms AS u
JOIN facilities_r AS fu
ON fu.id_uc = u.id_uc AND (fu.id_fu='4' OR fu.id_fu='3')
WHERE vizibility='1'
GROUP BY id_uc
ORDER BY u_premium desc, id_uc desc
70
DesignerGuy
SELECT 
    u . *
FROM
    room u
        JOIN
    facilities_r fu ON fu.id_uc = u.id_uc
        AND (fu.id_fu = '4' OR fu.id_fu = '3')
WHERE
    1 and vizibility = '1'
GROUP BY id_uc
ORDER BY u_premium desc , id_uc desc

ここでは、ANDではなく、ORを使用する必要があります。

Id_fuは、一度に4と3に等しくすることはできません。

12
Ananth

ファシリティテーブルに2回参加すると、次のようになります。

select u.* 
from room u 
  JOIN facilities_r fu1 on fu1.id_uc = u.id_uc and fu1.id_fu = '4'
  JOIN facilities_r fu2 on fu2.id_uc = u.id_uc and fu2.id_fu = '3' 
where 1 and vizibility='1' 
group by id_uc 
order by u_premium desc, id_uc desc
6
Andy Hobbs