powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Внутренний скалярный запрос не видит алиас внешнего запроса
4 сообщений из 4, страница 1 из 1
Внутренний скалярный запрос не видит алиас внешнего запроса
    #39464757
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
SELECT i.id ,
 
(SELECT SUM(sum_rub) FROM ( 
  (SELECT iwn.sum_rub
  FROM invoicing_working_norm iwn 
  INNER JOIN contract_working_norm_rate cwnr ON cwnr.id = iwn.contract_working_norm_rate_id
  INNER JOIN rate_timeline rt ON rt.id = cwnr.rate_timeline_id 
  INNER JOIN additional_service a1 ON a1.id = cwnr.service_id 
  INNER JOIN contract_cargo_head cch ON cch.id = rt.contract_cargo_head_id 
  INNER JOIN contract c1 ON c1.id = cch.contract_id 
  WHERE iwn.invoicing_id = i.id) 
  UNION 
  (SELECT e.sum_rub
  FROM invoicing_additional_service_editing e
  INNER JOIN additional_service a ON a.id = e.service_id
  INNER JOIN report_code rc ON rc.id = a.report_code_id 
  WHERE e.invoicing_id = i.id
  AND rc.report_code_name = 'Перегрузка') 
  )iq ) AS transshipment_sum
  
FROM invoicing i 
LEFT JOIN invoice_type it ON it.id = i.invoice_type_id 
INNER JOIN contract c ON c.id = i.contract_id 
INNER JOIN contragent cown ON cown.id = c.contragent_id 
LEFT JOIN vessel v ON v.id = i.vessel_id 
LEFT JOIN cargo_zone cz ON cz.id = i.cargo_zone_id 
WHERE c.cargo_status = 'import' 
AND NOT(UPPER(it.invoice_type_name) LIKE UPPER('АВАНС%')) 


Во внутреннем запросе идет объединение двух подзапросов, и оба они ссылаются на i.id.
Выдает ошибку авторUnknown column 'i.id' in 'where clause'
Если брать вместо объединения двух подзапросов просто один запрос, без второго SELECT, вычисляющего их сумму, то все выдает нормально. Проблема появляется когда обрамляешь эти два подзапроса третьим внешним селектом (SELECT SUM(sum_rub) FROM (
Внутренние запросы перестают видеть алиас i.
Как выйти из положения?
...
Рейтинг: 0 / 0
Внутренний скалярный запрос не видит алиас внешнего запроса
    #39464789
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так вышел из положения, корректно? Вместо UNION сделал +, и COALESCE во избежание NULL-ов. Таким образом избавляемся от многоуровневости.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SELECT i.id ,
 
  ((SELECT COALESCE(SUM(iwn.sum_rub), 0)
  FROM invoicing_working_norm iwn 
  INNER JOIN contract_working_norm_rate cwnr ON cwnr.id = iwn.contract_working_norm_rate_id
  INNER JOIN rate_timeline rt ON rt.id = cwnr.rate_timeline_id 
  INNER JOIN additional_service a1 ON a1.id = cwnr.service_id 
  INNER JOIN contract_cargo_head cch ON cch.id = rt.contract_cargo_head_id 
  INNER JOIN contract c1 ON c1.id = cch.contract_id 
  WHERE iwn.invoicing_id = i.id) 
  +
  (SELECT COALESCE(SUM(e.sum_rub), 0)
  FROM invoicing_additional_service_editing e
  INNER JOIN additional_service a ON a.id = e.service_id
  INNER JOIN report_code rc ON rc.id = a.report_code_id 
  WHERE e.invoicing_id = i.id
  AND rc.report_code_name = 'Перегрузка') 
  ) AS transshipment_sum
  
FROM invoicing i 
LEFT JOIN invoice_type it ON it.id = i.invoice_type_id 
INNER JOIN contract c ON c.id = i.contract_id 
INNER JOIN contragent cown ON cown.id = c.contragent_id 
LEFT JOIN vessel v ON v.id = i.vessel_id 
LEFT JOIN cargo_zone cz ON cz.id = i.cargo_zone_id 
WHERE c.cargo_status = 'import' 
AND NOT(UPPER(it.invoice_type_name) LIKE UPPER('АВАНС%')) 
...
Рейтинг: 0 / 0
Внутренний скалярный запрос не видит алиас внешнего запроса
    #39479698
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжении темы.
Сказалась одна неприятная особенность. Когда один из подзапросов не возвращает строки, его результат выглядит как NULL, не смотря на то, что внутри него стоит COALESCE. И это приводит к тому что при суммировании с ненулевым результатом другого запроса общая сумма получается NULL. Как обойти это ограничение?
...
Рейтинг: 0 / 0
Внутренний скалярный запрос не видит алиас внешнего запроса
    #39480026
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

....ну оберните еше раз в ISNULL...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Внутренний скалярный запрос не видит алиас внешнего запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]