Информация об изменениях

Сообщение Re: [MySql] доступ к родительскому контексту из подзапроса от 09.07.2019 23:49

Изменено 09.07.2019 23:57 VladCore

Re: [MySql] доступ к родительскому контексту из подзапроса
Здравствуйте, 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

Для начала так:
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
Re: [MySql] доступ к родительскому контексту из подзапроса
Здравствуйте, 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