powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / LATERAL в ASA9
3 сообщений из 3, страница 1 из 1
LATERAL в ASA9
    #32968957
IgorCCS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кто-нибудь в пару слов сказать что такое LATERAL.
А то я что-то не догоняю.
Был запрос с JOIN`ами, который на ASA7/8 нормально работал теперь на 9-ке не хочет.
--
В пятницу, в конце дня туго соображается:)
...
Рейтинг: 0 / 0
LATERAL в ASA9
    #32969057
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
// Варивант 1 - обычное внешнее соединение
SELECT t1.id, t2.Value
FROM Table1 t1
  LEFT JOIN (
    SELECT id, Sum(Value) AS Value
    FROM Table2
    GROUP BY id
  ) AS t2 ON t2.id = t1.id;

// Вариант 2 - его аналог через LATERAL
SELECT t1.id, t2.Value
FROM Table1 t1,
  LATERAL (
    SELECT Sum(Value) AS Value
    FROM Table2
    WHERE id = t1.id
  ) AS t2;
Как видим, LATERAL позволяет производить соединение внутри подзапроса, т.е. подзапрос t2 выполняется на каждую запись t1. В зависимости от ситуации бывает выгоднее сделать LATERAL, чем LEFT JOIN - хотя смотреть в данном случае нужно на план запроса и его стоимость, ситуации бывают разные.

Плюс LATERAL очень удобно использовать для вызова на каждую строку запроса процедуры, возвращающей записи, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE PROCEDURE sp_Table2 (
  IN @Id int
)
BEGIN
    SELECT Sum(Value) AS Value
    FROM Table2
    WHERE id = @Id;
END;

// Вариант 3 - вызов ХП на каждую запись t1
SELECT t1.id, t2.Value
FROM Table1 t1,
  LATERAL (sp_Table2 (t1.id)) t2;
Этот скрипт полный аналог 2 вышеприведенным скриптам. Вдогонку хочу заметить что оптимизатор его преобразует к варианту 2, а план запросов в данном случае будет у всех 3-х вариантов одинаковым в силу того, что подзапрос вариантов 2 и 3 легко приводится к обычному внешнему соединению (поправка - сие действительно только для последних билдов).
...
Рейтинг: 0 / 0
LATERAL в ASA9
    #32969266
IgorCCS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо!!! Теперь проще будет по этому хелп читать...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / LATERAL в ASA9
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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