powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ANSI join <> Oracle join ?!
13 сообщений из 13, страница 1 из 1
ANSI join <> Oracle join ?!
    #32097021
masterserg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет ораклоидам!

Кто-нибудь знает, почему запрос с LEFT JOIN соединением двух таблиц, написанный в синтаксисе ANSI, работает неправильно (возвращает только парные записи, а должен возвращать все из левой таблицы плюс парные из правой), а тот же запрос, переписанный в синтаксисе Oracle, работает правильно?

Может быть, какой-нибудь параметр в Oracle нужно установить специальным образом для работы с ANSI? Или это просто глюк?

В Oracle 9.0 этой проблемы вроде не было, а в 9.2 - появилась...

Заранее спасибо за помощь.
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097148
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты про это?

SQL> select * from emp;

ID_EMP NAME
---------- ---------------------------
1 Vasya
2 Petya
3 Dima
4 Olya
5 Kolya

SQL> select * from orders;

IDEMP ID_GOODS
---------- ----------
1 1
1 2
1 3
3 5
3 7
4 7
4 1
4 18

8 rows selected.

SQL> select distinct name from emp, orders
2 where id_emp=idemp(+);

NAME
--------------------------------------------------
Dima
Kolya
Olya
Petya
Vasya

SQL> select distinct name from emp left join orders
2 on id_emp=idemp;

NAME
--------------------------------------------------
Dima
Kolya
Olya
Petya
Vasya

так вроде нормально все...
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097166
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 masterserg

Это ты по-моему RIGHT JOIN описал
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097464
masterserg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Um

Да, я именно про это. Проблема в том, что в некоторых случаях запрос с LEFT JOIN в синтаксисе ANSI работает правильно, а в некторых нет - срабатывает не как LEFT JOIN, а как INNER JOIN, т.е. из левой таблицы возвращает не все записи, а только имеющие пары в правой таблице.
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097469
masterserg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 killed

Нет, не RIGHT JOIN. Кстати, я проверял RIGHT JOIN на тех же данных, на которых LEFT JOIN глючит, и проблем с RIGHT JOIN не было. Но мне то нужен именно LEFT JOIN...
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097470
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишите в оракловом синтаксисе. Помимо всего прочего, он проще и очевиднее (для меня, по крайней мере). А фичу с ансишным синтаксисом, как обычно, до ума доведут года через 3 :)
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097478
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 masterserg:
Так ты примерчик то приведи :-))) Хоть на тех же табличках что и я.
Мало сказать "глючит" надо показать как и доказать что это глюк, а не ошибка разработчика ;-)))
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097533
masterserg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Um

Запрос с LEFT JOIN в синтаксисе ANSI на твоем примере может вернуть не всех сотрудников, как должен, а только Васю (1), Диму (3) и Олю (4). А может вернуть и всех... Тот же запрос в синтаксие Oracle всегда возвращает всех сотрудников, как и должно быть. От чего это зависит - не знаю.

А пока мне светит исправление около 200 запросов с синтаксиса ANSI в синтаксис Oracle :(. Такой подлянки от Oracle трудно было ожидать, обычно этим занимается Билли, но в его MS SQL за несколько лет работы ничего подобного не встречалось, как ни странно!
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097542
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 9.2.0.2 пофиксенно несколько багов ANSI Joins - какой у тебя патч?
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097555
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть явно указать, что это внешнее соединение, т.е. к примеру left OUTER join? На http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_103a.htm#2076215

есть фраза: "You can specify the optional OUTER keyword following RIGHT, LEFT, or FULL to explicitly clarify that an outer join is being performed."
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097567
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 masterserg:

--Запрос с LEFT JOIN в синтаксисе ANSI на твоем примере может вернуть не
--всех сотрудников, как должен, а только Васю (1), Диму (3) и Олю (4). А
--может вернуть и всех... Тот же запрос в синтаксие Oracle всегда
--возвращает всех сотрудников, как и должно быть. От чего это зависит - не
--знаю.

Может "может", а может "не может" :-)))
Даже баги явление закономерное. Так что если хошь разобраться повтори ошибку на простых примерах.
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097605
masterserg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 .dba

Я пользуюсь триальной версией 9.2.0.1. Покупка коммерческой версии Oracle планируется, но только после того, как будет написана и окажется работоспособной моя программа.

Был бы Вам признателен, если бы Вы помогли мне советом: где найти патч к 9.2.0.1, в котором пофиксены баги с LEFT JOIN? Заранее спасибо.
...
Рейтинг: 0 / 0
ANSI join <> Oracle join ?!
    #32097622
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Был бы Вам признателен, если бы Вы помогли мне советом: где найти патч к
>9.2.0.1, в котором пофиксены баги с LEFT JOIN? Заранее спасибо.

Где найти кроме Металинка - незнаю. Но вот список пофиксенных багов
(Oracle 9i Release 2 Database Server Patch Set 1
for Windows NT
Patch Set Notes
Patch Set version 9.2.0.2.1 ):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ANSI Joins   
 9202    2245372   ORA- 904  possible from TABLE.* in SELECT list from ANSI join query       
 9202    2338661   Wrong results possible from ANSI outer join       
 9202    2352928   Wrong results / dump from FULL OUTER JOIN to SUBQUERY with GROUP BY       
 9202    2357784   OERI[QCTCTE1] parsing ANSI OUTER JOIN with a VIEW with a SET operation (eg: UNION ALL)
 9202    2360043   LEFT OUTER JOIN may produce incorrect results instead of ORA- 1799        
 9202    2370324   False ORA- 904  possible on NATURAL RIGHT JOIN of different schema tables       
 9202    2388008   Wrong results from ANSI outer join with 'const <relop> col'
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ANSI join <> Oracle join ?!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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