[MySql] доступ к родительскому контексту из подзапроса
От: mogadanez Чехия  
Дата: 09.07.19 15:10
Оценка:
Есть такой запрос:


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'



такое как нибудь обходится?
Re: [MySql] доступ к родительскому контексту из подзапроса
От: VladCore  
Дата: 09.07.19 23:49
Оценка:
Здравствуйте, 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
Отредактировано 09.07.2019 23:57 VladCore . Предыдущая версия .
Re: [MySql] доступ к родительскому контексту из подзапроса
От: wildwind Россия  
Дата: 10.07.19 06:31
Оценка: +1
Здравствуйте, mogadanez, Вы писали:

M>

M> #1054 — Unknown column 'parent.company_id' in 'where clause'


У тебя parent определен на верхнем уровне, а ссылаешься ты на него на третьем уровне вложенности. Так нельзя, и не только в MySql. Коррелированный подзапрос коррелируется только с вышестоящем уровнем.

M>такое как нибудь обходится?


Третий уровень вложенности тут совершенно излишен. Да и без второго можно обойтись.
Re[2]: [MySql] доступ к родительскому контексту из подзапроса
От: mogadanez Чехия  
Дата: 10.07.19 11:23
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.