Цитата (stump @ 10.05.2015 - 20:43) |
Не лишнее ли проверка is not null? |
select t1.*, t2.work_id as work_id_2
from ttt t1, ttt t2
where t1.work_id = 3 and
(t2.service_id = t1.service_id and t2.work_id = 6)
-- etc
select t0.*, c from (
select service_id, count(service_id) c
from ttt
where work_id in (3,6)
group by service_id
having c >= 2 /* 2 это число значений в in(), если кому-то не понятно */
) t
left join ttt t0 on t0.service_id = t.service_id and t0.work_id in (3,6)
Цитата |
2) Reh, Вы зря сопротивляетесь sergeiss-у |
Цитата |
И прежде чем утверждать, что "Так тоже не выйдет", нужно проверять. |
Цитата |
Если надо получить все work_id в одной строке, то что-то вроде: |
Цитата |
where work_id in (3,6) group by service_id having c >= 2 /* 2 это число значений в in(), если кому-то не понятно */ |
select t0.*, c from (
select service_id, count(distinct work_id) c
from ttt
where work_id in (3,6)
group by service_id
having c = 2
) t
left join ttt t0 on t0.service_id = t.service_id and t0.work_id in (3,6)
select service_id
from ttt
where work_id in (3,6)
group by service_id
having count(distinct work_id) = 2
Цитата (S.Chushkin @ 10.05.2015 - 22:44) |
select service_id from ttt where work_id in (3,6) group by service_id having count(distinct work_id) = 2 |
Цитата (sergeiss @ 10.05.2015 - 23:24) |
PPS. Да, согласен, так более корректно указывать COUNT(). |
Цитата |
Или, если только ИД: select service_id from ttt where work_id in (3,6) group by service_id having count(distinct work_id) = 2 |