2011-11-30 6 views
0

나는 다음과 같은 테이블을 가지고MySQL의 쿼리 조언 및 조인

Clubs(club_id, name) 
Facilities (id, club_id, name) 

이 논리는, 기본적으로 내가 가진 모든 클럽을 검색하는 간단한 쿼리를 하나 개 또는 여러 시설을 할 수있는 클럽을 필요로하는 쿼리를 할 필요가 특정 시설

예. 나는 dB에서 두 결과 (행)을 얻을 다음

SELECT * 
FROM (`clubs`) 
JOIN `club_facilities` ON `club_facilities`.`club_id` = `clubs`.`id` 
WHERE `facility_id` = 1 
OR `facility_id` = 3 

로 변경이 그러나 경우 - - 내가이 가정이 다시 0 결과를 제공

축구와 테니스 코트 시설을 갖춘 모든 클럽을 가져 오기 추가로 자기 조인을해야하지만 완전히 할 수있는 방법이 없습니다 .. 누군가 제안 할 수있는 몇 가지하시기 바랍니다. IN (1,3) 조건에 일치하는 시설의 수는 2입니다

감사

+0

당신을 자기가 가입하고 어떤 년대 purpose.please하는 것은 귀하의 질문에 좀 더 정교한 필요합니다. – punit

+0

@punit 죄송합니다. 제 질문은 가장 이상한 것이 아니라고 생각합니다. 운 좋게도 저는 아래의 도움으로 도움을 받았습니다. – Zabs

답변

2

시설 테이블을 두 번 가입하십시오.

SELECT * FROM clubs 
JOIN club_facilities f1 ON club_id = clubs.id 
JOIN club_facilities f2 ON club_id = clubs.id 
WHERE f1.facility_id = 1 
    AND f2.facility_id = 3 

또는 사용 부속 선택 :

SELECT * FROM clubs 
WHERE EXISTS(SELECT * FROM club_facilities WHERE club_id = clubs.id AND facility_id = 1) 
    AND EXISTS(SELECT * FROM club_facilities WHERE club_id = clubs.id AND facility_id = 3) 
+0

정확하지만 어색한 ;-) –

+0

재미 있고 똑같은 대답을 생각하십시오 :) – socha23

+0

@ soch23, 그래서 그것은 인간의 인식입니다! ;-) (퍼포먼스 관점에서 보면, 내가이기는 것 같아.) –

1
SELECT clubs.id FROM clubs JOIN club_facilities ON (club_id=clubs.id) 
WHERE facility_id IN (1,3) 
GROUP BY clubs.id 
HAVING count(DISTINCT facility_id)=2; 

당신에게 클럽을 얻을 것이다 (즉, 둘 다).