Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
Гость123
Guest
Хочу сделать объединени Left Join в запросе, но почему-то должного эффекта нет, например

SELECT
    t1.field1,
    NVL(t2.field2,0)
FROM
    t1,
    t2
WHERE
    t1.id = t2.id (+)

Получается обычный Inner Join. Хотя если вынести поля двух таблиц в отдельные запросы и сделать Left Join, все впорядке.

Скажите, как же так получается и как же сделать Left Join?

Ну, и пользуясь случаем хочу спросить в чем разница между NVL и NVL2?
25 авг 07, 20:27    [4575733]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116077
Гость123
Хочу сделать объединени Left Join в запросе, но почему-то должного эффекта нет, например

SELECT
    t1.field1,
    NVL(t2.field2,0)
FROM
    t1,
    t2
WHERE
    t1.id = t2.id (+)

Получается обычный Inner Join. Хотя если вынести поля двух таблиц в отдельные запросы и сделать Left Join, все впорядке.

Скажите, как же так получается и как же сделать Left Join?

В чем проблема ?

drop table t1
/
drop table t2
/
create table t1 (field1 varchar2(30), data date, id number)
/
create table t2 (field2 varchar2(30), data date, id number)
/
insert into t1 values (1,sysdate, 1)
/
insert into t1 values (2,sysdate, 3)
/
insert into t2 values (2,sysdate,3)
/
SELECT
    t1.field1,
    NVL(t2.field2,0)
FROM
    t1,
    t2
WHERE
    t1.id = t2.id (+)
/
FIELD1 NVL(T2.FIELD2,0) 
2 2 
1 0 

Гость 123
Ну, и пользуясь случаем хочу спросить в чем разница между NVL и NVL2?


NVL

NVL2
25 авг 07, 20:39    [4575749]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63933
Блог
Гость123

WHERE
t1.id = t2.id (+)

Получается обычный Inner Join

В это трудно поверить. Подозреваю, приведенный здесь sql - не тот, на котором наблюдается подобный эффект. Такое вот "превращение в inner join" случается, если на поля наложены несколько условий, и кое-где плюс позабыт - скажем, в запросе типа

where
  t1.id = t2.id (+) and t2.data = 'a'
26 авг 07, 00:50    [4575942]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
OlleUp
Member

Откуда: Хабаровск
Сообщений: 134
Почему бы не воспользоваться ясным синтакисом ANSI SQL ?
SELECT
    t1.field1,
    NVL(t2.field2,0)
FROM
    t1
LEFT JOIN t2 ON t1.id = t2.id

Более наглядно, труднее ошибиться. Пишите ПРАВИЛЬНО.
26 авг 07, 06:13    [4576004]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63933
Блог
OlleUp
Почему бы не воспользоваться ясным синтакисом ANSI SQL ?

Потому что он

1. Плохо читаем в случае нетривиальных запросов
2. В реализации Oracle имеет кучу ошибок, опять же в нетривиальных случаях
26 авг 07, 12:01    [4576126]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
softwarer
2. В реализации Oracle имеет кучу ошибок, опять же в нетривиальных случаях

В отношении LEFT/RIGHT JOIN это надо еще доказать! :)
26 авг 07, 12:11    [4576138]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
Гость123
Guest
Кстати, написав 2 одинаковых запроса с разным синтаксисом, получил, что варианта с объединением в условии работает в несколько раз быстрее нежели ANSI вариант. С чем это может быть связано?
26 авг 07, 14:59    [4576279]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
Гость123
Кстати, написав 2 одинаковых запроса с разным синтаксисом, получил, что варианта с объединением в условии работает в несколько раз быстрее нежели ANSI вариант. С чем это может быть связано?

привыкайте показывать выполнение из SQLplus
26 авг 07, 15:02    [4576283]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
Гость123
Guest
Работаю с базой Oracle через PL SQL Developer. Права только на чтение. SQL Plus нет.
26 авг 07, 15:07    [4576293]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
Гость123
Работаю с базой Oracle через PL SQL Developer. Права только на чтение. SQL Plus нет.

тогда хотя Command Window на худой конец...
26 авг 07, 15:20    [4576305]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
Гость123
Guest
Где можно скачать эту утилиту и требует ли она установки в системе?
26 авг 07, 15:49    [4576343]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116077
Гость123
Где можно скачать эту утилиту и требует ли она установки в системе?


Это не утилита, это окно в PL/SQL Developer, имитирующее работу в sqlplus.

PL/SQL Developer Command Window
26 авг 07, 16:09    [4576362]     Ответить | Цитировать Сообщить модератору
 Re: Почему, делая Left Join в Oracle Sql, отбора всех записей не происходит  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Гость123
Работаю с базой Oracle через PL SQL Developer. ...
SQL Plus нет.

Что-то мне подсказывает, что Вы нас обманываете :)
27 авг 07, 02:52    [4577062]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить