@Timur_gis_88

Где может быть ошибка в SQL запросе?

select
sum(h.area),
sum(s.area)
from
table1 , table2
left join table1 h on table1.id = h.id 
left join table2 s on table2.id = s.id
  • Вопрос задан
  • 404 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
Причина очень проста. Формально comma-style join - это алиас CROSS JOIN. Но есть подвох - приоритет comma-style join ниже приоритета explicit join. И выражение источника данных, если расставить скобки в соответствии с приоритетом, получится такое:

from
table1 , ( table2
           left join table1 h on table1.id = h.id
           left join table2 s on table2.id = s.id )

Вот теперь прекрасно видно, что внутри скобки о существовании где-то там снаружи table1 ничего не известно.

Правильно - забыть НАВСЕГДА о возможности использовать запятую. И писать вот так:
FROM table1 
CROSS JOIN table2
LEFT JOIN table1 h ON table1.id = h.id
LEFT JOIN table2 s ON table2.id = s.id


PS. Если всё же без comma-style жизнь не мила, можно поступить так, как обычно делают для явного задания приоритета. То есть добавить задающие приоритет скобки:
FROM (table1 , table2)
LEFT JOIN table1 h ON table1.id = h.id
LEFT JOIN table2 s ON table2.id = s.id

Теперь всё в порядке - сначала выполнится запятая, а потом к результату будут LEFT JOIN остальные две таблицы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы