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;
Каждое условие подсчитывает количество строк, соответствующих данному условию.