Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Порядок соединения таблицы / 6 сообщений из 6, страница 1 из 1
12.02.2010, 11:16
    #36465187
ASFK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок соединения таблицы
Добрый день.

Как определяется порядок соединений таблиц в запросах типа
Код: plaintext
table1 inner join table2 left join table3
Потому что результаты запросов
Код: plaintext
(table1 inner join table2) left join table3
и
Код: plaintext
table1 inner join (table2 left join table3)
могут различаться...
Может быть, есть какой-то приоритет операций, как умножение и сложение?
...
Рейтинг: 0 / 0
12.02.2010, 12:15
    #36465413
aleksandy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок соединения таблицы
ASFK,

Все делается по порядку, который определяется положением ON. Например,
Код: plaintext
1.
2.
3.
4.
5.
6.
select *
  from t0
    join t1
      on ...
    join t2
      on ...
будет соединять сначала t0 с t1, потом результат соединения с t2. А вот
Код: plaintext
1.
2.
3.
4.
5.
6.
select *
  from t0
    join t1
      join t2
        on ...
      on ...
будет соединять сначала t1 с t2, а потом t0 с результатом соединения t1 и t2.

Как-то так...
...
Рейтинг: 0 / 0
12.02.2010, 12:21
    #36465435
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок соединения таблицы
ASFKДобрый день.

Как определяется порядок соединений таблиц в запросах типа
Код: plaintext
table1 inner join table2 left join table3
Потому что результаты запросов
Код: plaintext
(table1 inner join table2) left join table3
и
Код: plaintext
table1 inner join (table2 left join table3)
могут различаться...
Может быть, есть какой-то приоритет операций, как умножение и сложение?
Пример можете привести?

aleksandyASFK,

Все делается по порядку, который определяется положением ON.

Не все.
...
Рейтинг: 0 / 0
12.02.2010, 18:10
    #36466744
ASFK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок соединения таблицы
AlexFF__|ASFKДобрый день.

Как определяется порядок соединений таблиц в запросах типа
Код: plaintext
table1 inner join table2 left join table3
Потому что результаты запросов
Код: plaintext
(table1 inner join table2) left join table3
и
Код: plaintext
table1 inner join (table2 left join table3)
могут различаться...
Может быть, есть какой-то приоритет операций, как умножение и сложение?
Пример можете привести?

aleksandyASFK,

Все делается по порядку, который определяется положением ON.

Не все.
table1 left join table2 on ... inner join table3 on...
если поставить скобки так: (table1 left join table2 on ...) inner join table3 on...
то результаты запроса могут быть пустыми, если соединение таблиц в скобках не связано с table3 по какому-то условию (пример привести легко).
Если же наоборот поставить скобки table1 left join (table2 inner join table3 on...) on ...
то результат запроса заведомо непустой (содержит строки table1.

В реаьлной ситуации мне приходится объединять штук по 10 таблиц - некоторые как left join, другие inner join. Я хочу разобраться, в каком случае мне надо ставить скобки - да и просто, как вообще происходит выбор порядка соединения.
...
Рейтинг: 0 / 0
13.02.2010, 08:10
    #36467306
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок соединения таблицы
а что написано в on?
...
Рейтинг: 0 / 0
13.02.2010, 10:38
    #36467333
ASFK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок соединения таблицы
alex-lsа что написано в on?

Код: plaintext
1.
2.
3.
4.
select * from 
    table1 left join table2 
      on table1.key1 = table2.key1
    inner join table3
      on table2.key2 = table3.key2

Если сначала выполнится соединение table2 с table3, а только потом начнётся left join, то строки в результате заведомо будут (как минимум строки из table1).
Если же сначала выполняется left join, то затем может получиться так, что совпадений по key2 просто нет, тогда результат будет пустой (0 строк).
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Порядок соединения таблицы / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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