Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / странное поведение JOIN / 6 сообщений из 6, страница 1 из 1
31.03.2006, 14:51
    #33637832
olden69
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странное поведение JOIN
вот запрос, мигрировавший с MS SQL
Код: plaintext
1.
2.
3.
4.
SELECT t1.id, t2.id, t3.id
FROM t1
LEFT JOIN t2 ON t2.id = t1.id_t2
INNER JOIN t3 ON t3.id = t2.id_t3
в таблице " t1 " есть записи, у которых значение поля " id_t2 " не имеет соответствия в поле " id " табицы " t2 ". В MSSQL этот запрос вернет все записи таблицы " t1 ", а вот в PostgreSQL он не возвращает ни одной записи.

IMHO поведение MSSQ в данной ситуации логичнее.
Объясните, плиз, кто-нибудь сие неподобство. :)
...
Рейтинг: 0 / 0
31.03.2006, 15:10
    #33637886
tompson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странное поведение JOIN
А можно расставить там скобки- что бы более наглядно было видно какой джойн выполняется первым ?
...
Рейтинг: 0 / 0
31.03.2006, 15:17
    #33637901
olden69
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странное поведение JOIN
да, забыл указать
в таблице t2 нет записей со значениями поля id_t3 , которые имеются в поле id таблицы t3 . Т.е. (t2 INNER JOIN t3 ON t3.id = t2.id_t3) в данном случае не возвращает ни одной записи. Однако по логике это не должно мешать выборке записей из t1 , поскольку в ней связка идет по LEFT JOIN .

Попытка исправить положение вариантом записи t1 LEFT JOIN (t2 INNER JOIN t3) ничего не дала
...
Рейтинг: 0 / 0
31.03.2006, 15:25
    #33637940
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странное поведение JOIN
olden69 Попытка исправить положение вариантом записи t1 LEFT JOIN (t2 INNER JOIN t3) ничего не далаверсия постгреса?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT t1.id, t2.id, t3.id
FROM t1
LEFT JOIN (t2 
INNER JOIN t3 ON t3.id = t2.id)
ON t2.id = t1.id
---
 1 ;;
 2 ;;
 3 ;;
постгрес 8.1.
...
Рейтинг: 0 / 0
31.03.2006, 15:28
    #33637950
olden69
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странное поведение JOIN
все, понял
исправил ситуацию

Код: plaintext
1.
2.
3.
SELECT t1.id, t2.id, t3.id
FROM t1
LEFT JOIN (t2 INNER JOIN t3 ON t3.id = t2.id_t3) ON t2.id = t1.id_t2

забавно, что MSSQL имеет свои допущения по порядку связывания
видимо по принципу приоритетности INNER над LEFT , а у pgSQL по порядку :)
...
Рейтинг: 0 / 0
31.03.2006, 15:31
    #33637960
olden69
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странное поведение JOIN
придется отвыкать от MSSQL-ных привычек, тем более, что строгая форма работает и в нем, а в ихнем же Access только она и работает :)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / странное поведение JOIN / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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