|
|
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
Привет ораклоидам! Кто-нибудь знает, почему запрос с LEFT JOIN соединением двух таблиц, написанный в синтаксисе ANSI, работает неправильно (возвращает только парные записи, а должен возвращать все из левой таблицы плюс парные из правой), а тот же запрос, переписанный в синтаксисе Oracle, работает правильно? Может быть, какой-нибудь параметр в Oracle нужно установить специальным образом для работы с ANSI? Или это просто глюк? В Oracle 9.0 этой проблемы вроде не было, а в 9.2 - появилась... Заранее спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2003, 19:26 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
ты про это? 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 09:48 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
2 masterserg Это ты по-моему RIGHT JOIN описал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 10:10 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
2 Um Да, я именно про это. Проблема в том, что в некоторых случаях запрос с LEFT JOIN в синтаксисе ANSI работает правильно, а в некторых нет - срабатывает не как LEFT JOIN, а как INNER JOIN, т.е. из левой таблицы возвращает не все записи, а только имеющие пары в правой таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 14:54 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
2 killed Нет, не RIGHT JOIN. Кстати, я проверял RIGHT JOIN на тех же данных, на которых LEFT JOIN глючит, и проблем с RIGHT JOIN не было. Но мне то нужен именно LEFT JOIN... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 14:57 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
Пишите в оракловом синтаксисе. Помимо всего прочего, он проще и очевиднее (для меня, по крайней мере). А фичу с ансишным синтаксисом, как обычно, до ума доведут года через 3 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 14:58 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
2 masterserg: Так ты примерчик то приведи :-))) Хоть на тех же табличках что и я. Мало сказать "глючит" надо показать как и доказать что это глюк, а не ошибка разработчика ;-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 15:06 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
2 Um Запрос с LEFT JOIN в синтаксисе ANSI на твоем примере может вернуть не всех сотрудников, как должен, а только Васю (1), Диму (3) и Олю (4). А может вернуть и всех... Тот же запрос в синтаксие Oracle всегда возвращает всех сотрудников, как и должно быть. От чего это зависит - не знаю. А пока мне светит исправление около 200 запросов с синтаксиса ANSI в синтаксис Oracle :(. Такой подлянки от Oracle трудно было ожидать, обычно этим занимается Билли, но в его MS SQL за несколько лет работы ничего подобного не встречалось, как ни странно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 15:57 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
В 9.2.0.2 пофиксенно несколько багов ANSI Joins - какой у тебя патч? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 16:06 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
А есть явно указать, что это внешнее соединение, т.е. к примеру 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." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 16:27 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
2 masterserg: --Запрос с LEFT JOIN в синтаксисе ANSI на твоем примере может вернуть не --всех сотрудников, как должен, а только Васю (1), Диму (3) и Олю (4). А --может вернуть и всех... Тот же запрос в синтаксие Oracle всегда --возвращает всех сотрудников, как и должно быть. От чего это зависит - не --знаю. Может "может", а может "не может" :-))) Даже баги явление закономерное. Так что если хошь разобраться повтори ошибку на простых примерах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 16:36 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
2 .dba Я пользуюсь триальной версией 9.2.0.1. Покупка коммерческой версии Oracle планируется, но только после того, как будет написана и окажется работоспособной моя программа. Был бы Вам признателен, если бы Вы помогли мне советом: где найти патч к 9.2.0.1, в котором пофиксены баги с LEFT JOIN? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 17:15 |
|
||
|
ANSI join <> Oracle join ?!
|
|||
|---|---|---|---|
|
#18+
>Был бы Вам признателен, если бы Вы помогли мне советом: где найти патч к >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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2003, 17:26 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32097478&tid=1992024]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
171ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 521ms |

| 0 / 0 |
