MySQL Query советы и присоединения - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть следующие таблицы, и мне нужно выполнить запрос

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

Логика состоит в том, что клуб может иметь одно или несколько объектов, мне нужен простой запрос, чтобы в основном искать все клубы, которые имеют определенные возможности

напр.Получить все клубы с футбольным и теннисным кортами

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

Это возвращает 0 результатов - однако если изменить это на следующее

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

Я получу два результата (строки) из БД- Я полагаю, что мне нужно было бы сделать дополнительное самостоятельное присоединение, но я не совсем уверен, как это сделать. Кто-нибудь может дать несколько советов, пожалуйста.

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Дважды присоединяйтесь к таблице услуг.

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)
1 голос
/ 30 ноября 2011
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 (т. Е. Оба).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...