Как добавить условие в таблицу множественного объединения - PullRequest
0 голосов
/ 15 марта 2010

У меня есть две таблицы:

client:
  id (int) #PK
  name (varchar)

client_category:
  id (int) #PK
  client_id (int)
  category (int)

Допустим, у меня есть эти данные:

client: {(1, "JP"), (2, "Simon")}
client_category: {(1, 1, 1), (2, 1, 2), (3, 1, 3), (4,2,2)}

tl; dr client # 1 имеет категории 1, 2, 3 и client # 2 имеет только категорию 2

Я пытаюсь создать запрос, который позволил бы мне искать несколько категорий.Например, я хотел бы искать всех клиентов, которые имеют по крайней мере категории 1 и 2 (вернул бы клиента # 1).Как мне этого добиться?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 15 марта 2010
select client.id, client.name
from client
inner join client_category cat1 on client.id = cat1.client_id and cat1.category = 1
inner join client_category cat2 on client.id = cat2.client_id and cat2.category = 2
2 голосов
/ 15 марта 2010

Это бы сработало

SELECT
  c.id, 
  c.name
FROM
  client c 
  INNER JOIN client_category cc on c.id = cc.client_id
WHERE
  cc.category in (1,2)
GROUP BY 
  c.id, c.name
HAVING
  count(c.id) >= 2

[обновление]

count(c.id) должно быть count( DISTINCT c.id ), если категория может быть выбрана для одного и того же клиента более одного раза, как отметил OMG Ponies в своем комментарии.

0 голосов
/ 15 марта 2010

«тупой» ответ

select c.id
  from client c
 where c.id in (select cc.client_id from client_category cc where cc.id = 1)
   and c.id in (select cc.client_id from client_category cc where cc.id = 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...