Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ключевое слово LATERAL , что оно означает? / 5 сообщений из 5, страница 1 из 1
30.11.2005, 10:15
    #33407623
Геша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключевое слово LATERAL , что оно означает?
...
Рейтинг: 0 / 0
30.11.2005, 10:41
    #33407721
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключевое слово LATERAL , что оно означает?
LATERAL аналог EXISTS, IN и SELECT (SELECT) FROM ...
То есть разрешается внутри соединения LATERAL ссылаться на поля внешнего запроса. Примеры использования:
Код: plaintext
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:
SELECT *,
   (SELECT Count()
    FROM b
    WHERE a.id = b.id) AS Count
FROM a

// Соединение через JOIN:
SELECT *
FROM a
  INNER JOIN (
    SELECT b.id, Count() AS Count
    FROM b
    GROUP BY b.id ) AS b ON b.id = a.id;

// Соединение через LATERAL:
SELECT *
FROM a,
  LATERAL (
    SELECT Count() AS Count
    FROM b
    WHERE a.id = b.id ) AS b;

// Соединение хранимой процедуры, с ее вызовом на каждую запись из
// таблицы a и передачей полей записи в процедуру
SELECT *
FROM a,
  LATERAL (StoredProc (a.id)) AS b;
С хранимой процедурой в принципе все понятно - если бы не было LATERAL, то пришлось бы на таблицу "a" организовывать курсор и в цикле вызывать процедуру, скидывая результаты во временную таблицу. С подзапросами не все так просто. Легкие запросы, как тот, что я привел выше, оптимизатор сам в плане запросов преобразует и приведет к стандартным JOIN (таким образом здесь что SELECT в SELECT, что LATERAL будет только семантически отличаться от INNER JOIN). Однако в сложных запросах, где подзапрос настолько сложен, что описание его через JOIN может привести к тому, что оптимизатор построит не самый эффективный план запроса, использование LATERAL может оказаться более эффективным и быстрым (за счет того, что оптимизатор уведет подзапрос LATERAL в subquery и будет его выполнять на каждую строчку запроса). Но стоит помнить, что LATERAL это не панацея - в любом случае стоит для таких запросов смотреть и анализировать планы запросов, так как где то эффективнее будет использование JOIN, а где то как раз LATERAL. В принципе LATERAL нужно всегда рассматривать как конструкцию SELECT в SELECT, но с разрешением возвращения не одного, а множества полей. В остальном эти обе конструкции обрабатываются оптимизатором одинаковым образом.
...
Рейтинг: 0 / 0
30.11.2005, 10:52
    #33407749
Геша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключевое слово LATERAL , что оно означает?
ASCRUS
Как всегда спасибо !
...
Рейтинг: 0 / 0
30.11.2005, 12:15
    #33408051
rashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключевое слово LATERAL , что оно означает?
аб какой платформе идет речь?
...
Рейтинг: 0 / 0
30.11.2005, 12:24
    #33408106
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключевое слово LATERAL , что оно означает?
rashman wrote:

> аб какой платформе идет речь?

О любой, на которой запустится ASA9 :).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ключевое слово LATERAL , что оно означает? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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