sql select через таблицу соединений

Привет всем,

Мне нужно немного помочь с написанием выбора... проблема заключается в следующем:

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

Помогите+ ---- + ------- + --------- +
| id | название | содержание |
+ ---- + ------- + --------- +
| 1 | а | аконт |
| 2 | б | bcont |
+ ---- + ------- + --------- +helptag+ ---- + ------ +
| id | имя |
+ ---- + ------ +
| 1 | атаг |
| 2 | btag |
+ ---- + ------ +helphelptag (присоединиться к таблице)+ -------- + ----------- +
| помощь | helptagid |
+ -------- + ----------- +
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
+ -------- + ----------- +

Мне нужно выбрать те подсказки, у которых есть идентификаторы, которые я даю. Так, например, если я даю tag_id 2, то оба помогают 1 и 2, но если я даю tag_id 1 и 2, то только помогают 1.

Я попытался leftjoin, с идентификаторами IN[tag_ids], но он возвращает обе подсказки, если я даю 1 и 2.

1 ответ

Решение

Это пример запроса "набор в наборе". Мне нравится решать это с помощью агрегации и having пункт. Для вашего первого вопроса:

select helpid
from helphelptag
group by helpid
having sum(case when helptagid = 2 then 1 else 0 end) > 0;

Для второго просто добавьте еще одно условие:

having sum(case when helptagid = 2 then 1 else 0 end) > 0 and
       sum(case when helptagid = 1 then 1 else 0 end) > 0;

Каждое условие подсчитывает количество строк, соответствующих данному условию.

Другие вопросы по тегам