Есть такой запрос:
Select parent.*,
( Select count(*) from ( Select e.email, e.task_id
from event e
where e.company_id = parent.company_id
AND e.event_type_id in (10, 11, 12)
AND e.email in ( 'email1', 'email2' )
AND e.task_id in ( 5,10,15 )
GROUP by e.email, e.subject_id ) as pairs ) as done
from parent_table parent
ошибка
#1054 — Unknown column 'parent.company_id' in 'where clause'
такое как нибудь обходится?
Здравствуйте, mogadanez, Вы писали:
M>Есть такой запрос:
M>M>Select parent.*,
M>( Select count(*) from ( Select e.email, e.task_id
M> from event e
M> where e.company_id = parent.company_id
M> AND e.event_type_id in (10, 11, 12)
M> AND e.email in ( 'email1', 'email2' )
M> AND e.task_id in ( 5,10,15 )
M> GROUP by e.email, e.subject_id ) as pairs ) as done
M>from parent_table parent
M>
M>ошибка
M>M> #1054 — Unknown column 'parent.company_id' in 'where clause'
M>такое как нибудь обходится?
Наверно join-ом. В MySQL это называется correlated subqueries
https://dev.mysql.com/doc/refman/8.0/en/correlated-subqueries.html
https://www.geeksengine.com/database/subquery/correlated-subquery.php
Для начала, внутренний select выгядит так:
from
parent_table parent
inner join
(
Select e.email, e.task_id, e.company_id
from event e
where /* e.company_id = parent.company_id
AND */ e.event_type_id in (10, 11, 12)
AND e.email in ( 'email1', 'email2' )
AND e.task_id in ( 5,10,15 )
GROUP by e.email, e.subject_id, e.company_id
) as pairs
on pairs.company_id = parent.company_id
Здравствуйте, mogadanez, Вы писали:
M>M> #1054 — Unknown column 'parent.company_id' in 'where clause'
У тебя parent определен на верхнем уровне, а ссылаешься ты на него на третьем уровне вложенности. Так нельзя, и не только в MySql. Коррелированный подзапрос коррелируется только с вышестоящем уровнем.
M>такое как нибудь обходится?
Третий уровень вложенности тут совершенно излишен. Да и без второго можно обойтись.
Здравствуйте, wildwind, Вы писали:
W>Третий уровень вложенности тут совершенно излишен. Да и без второго можно обойтись.
не очень понимаю как
заменил GroupBy на Count ( distinct email, sibject_id) — вроде работает
по поводу уровеней — вот такое работает хотя вроде тоже третий уровень:
Select parent.*,
( Select count(*)
from event e
where e.company_id = parent.company_id
AND e.task_id in (
select id from tasks t where t.parent_id = parent.id
)
GROUP by e.email, e.subject_id ) as done
from parent_table parent