MySQL加入多个条件

时间:2011-11-05 06:22:26

标签: mysql sql join

我有一个sql查询的问题,实际上是一个简单的查询,但我无法弄清楚我错过了什么,所以我来找你帮忙... 所以,我必须做的事情

我有两张桌子roomsrooms 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 

一切都没问题。

但是,如果我想选择具有更多设施的房间,让我们说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 

它不起作用。

我无法理解为什么它不起作用,但我无法弄清楚如何把条件......

谢谢,Mihai

4 个答案:

答案 0 :(得分:68)

您可以使用括号对条件进行分组。当您检查某个字段是否与另一个字段相同时,您希望使用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

答案 1 :(得分: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

你必须在这里使用OR,而不是AND。

由于id_fu不能同时等于4和3。

答案 2 :(得分:6)

如果您两次加入设施表,您将获得所需信息:

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

答案 3 :(得分:0)

这也应该起作用(未经测试):

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

如果u.id_fu是数字字段,则可以删除它们周围的'。 可见度相同。仅当该字段是文本字段(数据类型为char,varchar或text-datatype中的一种,例如longtext)时,该值才必须用'甚至“括起来。

我和Oracle也建议将表名和字段名放在反引号中。 因此,如果字段名称包含关键字,您就不会遇到麻烦。