Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / первод в ansi sql / 15 сообщений из 15, страница 1 из 1
10.11.2021, 19:41
    #40110856
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
Есть запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t1 as
( select 1 rid from dual union all
  select 2 from dual),
  
t2 as
( select 1 rid, 2 n from dual union all
  select 2, 3 from dual union all
  select 3, null from dual
) 

select * from t1, t2
where t1.rid = t2.rid(+)
and t2.n(+) = null



Каким образом его можно переделать в ANSI SQL с Join?
...
Рейтинг: 0 / 0
10.11.2021, 20:19
    #40110867
qlost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
капец. всегда недолюблювал этот птичий синтаксис как в вашем скрипте
зачем тут вообще джойны? exists в руки
...
Рейтинг: 0 / 0
10.11.2021, 21:05
    #40110890
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
Поскольку задача не формализована, есть подозрение, что в native запрос должен выглядеть так:

Код: plsql
1.
2.
3.
select * from t1, t2
 where t1.rid (+) = t2.rid 
 and t2.n is null



Тогда в ANSI:

Код: plsql
1.
select t1.rid, t2.rid, t2.n from t1 right join t2 on (t1.rid = t2.rid) where t2.n is null
...
Рейтинг: 0 / 0
10.11.2021, 21:09
    #40110891
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
Также можно рекомендовать MINUS и FULL JOIN.
...
Рейтинг: 0 / 0
10.11.2021, 21:57
    #40110900
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
Почему right?
Вроде же left outer join

могу ошибаться
...
Рейтинг: 0 / 0
11.11.2021, 08:12
    #40110930
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
dmdmdm,

left
...
Рейтинг: 0 / 0
11.11.2021, 09:00
    #40110940
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
Еще раз - я переставил плюсик, поскольку мне показалось, что с формулировкой задачи ошибка.

Я понял ее так: найти строки t2, которых нет в t1.

Соответственно, не left, а right.
...
Рейтинг: 0 / 0
11.11.2021, 14:48
    #40111028
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
dmdmdm

Я понял ее так: найти строки t2, которых нет в t1.


Ты неправильно понял. Условие t1.rid = t2.rid(+) даст все строки t1 повторенные GREATEST(1,N) где N это число раз t1.rid встречается в t2. А вот условие t2.n(+) = null довольно "хитрое". Сравнение с NULL всегда дает UNKNOWN посему запрос есть хитронавороченый

Код: plsql
1.
2.
3.
4.
with t1 as
( select 1 rid from dual union all
  select 2 from dual)
select rid,null,null from t1



SY.
...
Рейтинг: 0 / 0
11.11.2021, 15:16
    #40111041
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
dmdmdm

Я понял ее так: найти строки t2, которых нет в t1.


И даже если поменять на t2.n(+) is null мы не получим строки t2, которых нет в t1. Мы получим все строки t1 повторенные GREATEST(1,N) раз где N это число раз t1.rid встречается в t2 и t2.n is null.

SY.
...
Рейтинг: 0 / 0
11.11.2021, 15:19
    #40111044
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
SY,

в чем отличие от
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> ed
Wrote file afiedt.buf

  1  with t1 as
  2  ( select 1 rid from dual union all
  3    select 2 from dual),
  4  t2 as
  5  ( select 1 rid, 2 n from dual union all
  6    select 2, 3 from dual union all
  7    select 3, null from dual
  8  )
  9* select * from t1 left join t2 on (t1.rid=t2.rid and t2.n = null )
SQL> /

       RID        RID          N
---------- ---------- ----------
         1
         2


авторА вот условие t2.n(+) = null довольно "хитрое"

"100%" внешнее соеденение (как будто т2 пустая)

.....
stax
...
Рейтинг: 0 / 0
11.11.2021, 15:22
    #40111045
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
Stax
SY,

в чем отличие от
Код: plsql
1.
select * from t1 left join t2 on (t1.rid=t2.rid and t2.n = null )



Код: plaintext
t2.n = null
Всегда будет давать UNKNOWN (не TRUE и не FALSE)
...
Рейтинг: 0 / 0
11.11.2021, 15:35
    #40111051
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
wsnet
Есть запрос
Код: plsql
1.
2.
3.
. . .
where t1.rid = t2.rid(+)
and t2.n(+) = null


Каким образом его можно переделать в ANSI SQL с Join?

Код: plaintext
t2.n = null
Всегда будет давать UNKNOWN (не TRUE и не FALSE)

То есть из таблицы T2 в результат никогда не попадут никакие данные (строки).

Код: plsql
1.
2.
3.
4.
      RID        RID          N
---------- ---------- ----------
         1    <NULL>     <NULL>             
         2    <NULL>     <NULL>             
...
Рейтинг: 0 / 0
11.11.2021, 16:48
    #40111073
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
Валерий Юринский


То есть из таблицы T2 в результат никогда не попадут никакие данные (строки).



как будто т2 пустая


.....
stax
...
Рейтинг: 0 / 0
11.11.2021, 18:01
    #40111115
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
Stax
Валерий Юринский

То есть из таблицы T2 в результат никогда не попадут никакие данные (строки).

как будто т2 пустая

Именно так!
...
Рейтинг: 0 / 0
11.11.2021, 20:54
    #40111152
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
первод в ansi sql
Ты неправильно понял.

Давайте дождемся ТС, и он нам разъяснит, кто и что понял.

Условие t1.rid = t2.rid(+) даст

Я знаю, что даст плюсик. И сознательно переставил его. О чем сообщил.

t2.n(+) = null

Именно.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / первод в ansi sql / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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