IT TIP

여러 조건으로 MySQL 조인

itqueen 2020. 12. 30. 19:59
반응형

여러 조건으로 MySQL 조인


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 

괜찮습니다.

하지만 더 많은 시설이있는 방을 선택하려면 다음 쿼리를 사용하여 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 

작동하지 않습니다.

왜 안되는지 이해가 안되는데 조건을 어떻게 넣을지 모르겠네요 ...

고마워, 미하이


괄호로 조건을 그룹화 할 수 있습니다. 필드가 다른 필드와 같은지 확인할 때 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

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과 같을 수 없기 때문입니다.


시설 테이블에 두 번 참여하면 원하는 것을 얻을 수 있습니다.

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

참조 URL : https://stackoverflow.com/questions/8018550/mysql-join-with-multiple-conditions

반응형