我有一个sql查询的问题,实际上是一个简单的查询,但我无法弄清楚我错过了什么,所以我来找你的帮助...所以,我要做什么
我有两个表rooms
和rooms facilities
......我不得不选择与所希望的设施客房..
如果我选择一个房间有一个设施(设施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
Run Code Online (Sandbox Code Playgroud)
一切安好.
但是,如果我想选择具有更多设施的房间,让我们说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
Run Code Online (Sandbox Code Playgroud)
它不起作用.
我无法理解为什么它不起作用,但我无法弄清楚如何处理这个条件......
谢谢,Mihai
And*_*ing 70
您可以使用括号对条件进行分组.当您检查字段是否等于另一个字段时,您想要使用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
Run Code Online (Sandbox Code Playgroud)
Ana*_*nth 12
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
Run Code Online (Sandbox Code Playgroud)
你必须在这里使用OR,而不是AND.
由于id_fu不能同时等于4和3.
如果您两次加入设施表,您将获得以下内容:
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
Run Code Online (Sandbox Code Playgroud)