2011-11-30 73 views
0

我有以下表和需要做一個查詢MySQL查詢諮詢和加入

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

的邏輯是一傢俱樂部可以有一個或多個設備,我需要一個簡單的查詢,基本搜索具有所有俱樂部某些設施

例如。得到與足球和網球場設施,所有的俱樂部

此帶回0的結果 - 但是如果將其更改爲以下

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

我從DB獲得兩個結果(行) - 我相信我將需要做一些額外的自我加入,但不完全確定如何做到這一點..任何人都可以提出一些建議。

感謝

+0

你在哪裏需要自行加入,有什麼purpose.please闡述你的問題多一點。 – punit

+0

@punit對不起,我意識到我的問題不是最清楚的幸運,我已經在socha下面的幫助下提醒我。 – 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; 

將讓你的俱樂部,其中的匹配IN (1,3)條件設施的數量爲2(即兩個)。