powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос
8 сообщений из 8, страница 1 из 1
Запрос
    #39760322
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,

есть две таблицы:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table t1 as 
select  1 t,level id,case when level in (2,4) then null else level end id1
  from dual 
 connect by level < 10
create table t2 as 
select  2 t
        ,level id
        ,case when level in (2,3,8) then null else level end id1
  from dual 
 connect by level < 10



необходимо найти найти все записи из t1 для которых должны выполняться условия:
если t1.id1 is not null и t2.id1 is not null, то запись выводится при условии t1.id1 = t2.id1

если t1.id1 is null и t2.id1 is null, то запись выводится

если t1.id1 is null и t2.id1 is not null, то запись не выводится

Запрос
Код: plsql
1.
2.
select  t1.t,t1.id,t1.id1,t2.t,t2.id,t2.id1
....

должен вернуть значения:

t1.tt1.idt1.id1t2.tt2.idt2.id111121112 133 155255166266177277188 199299
...
Рейтинг: 0 / 0
Запрос
    #39760338
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frog,

Почему t1.id = 3 возвращается?
По условиям t1.id1 is not null должен сджойниться только с t2.id1 = 3, которой нет.

З.Ы. курите NVL
...
Рейтинг: 0 / 0
Запрос
    #39760348
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoocobalt_frog,

Почему t1.id = 3 возвращается?
По условиям t1.id1 is not null должен сджойниться только с t2.id1 = 3, которой нет.

З.Ы. курите NVL

Задача такая, что значение 3 должно возвращаться.
+ доп условие:

• если t1.id1 is not null и t2.id1 is null, то запись выводится
...
Рейтинг: 0 / 0
Запрос
    #39760367
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogDshedoocobalt_frog,

Почему t1.id = 3 возвращается?
По условиям t1.id1 is not null должен сджойниться только с t2.id1 = 3, которой нет.

З.Ы. курите NVL

Задача такая, что значение 3 должно возвращаться.
+ доп условие:

• если t1.id1 is not null и t2.id1 is null, то запись выводится

Я обратился к местному экстрасенсу, он утверждает, что у вас в условиях кое-где перепутаны id1 и id.
...
Рейтинг: 0 / 0
Запрос
    #39760370
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with t as (select  1 t,level id,case when level in (2,4) then null else level end id1
  from dual
 connect by level < 10)
, t2 as (
select  2 t
        ,level id
        ,case when level in (2,3,8) then null else level end id1
  from dual
 connect by level < 10)

 select * from t join t2 on nvl(t.id1,-1) = nvl(nvl(t2.id1,t.id1),-1) and t.id = t2.id 
order by 1,2
...
Рейтинг: 0 / 0
Запрос
    #39760382
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoo
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with t as (select  1 t,level id,case when level in (2,4) then null else level end id1
  from dual
 connect by level < 10)
, t2 as (
select  2 t
        ,level id
        ,case when level in (2,3,8) then null else level end id1
  from dual
 connect by level < 10)

 select * from t join t2 on nvl(t.id1,-1) = nvl(nvl(t2.id1,t.id1),-1) and t.id = t2.id 
order by 1,2



столбец id указан просто для примера, на него не стоит ориентироваться.
...
Рейтинг: 0 / 0
Запрос
    #39760386
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogDshedoo
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with t as (select  1 t,level id,case when level in (2,4) then null else level end id1
  from dual
 connect by level < 10)
, t2 as (
select  2 t
        ,level id
        ,case when level in (2,3,8) then null else level end id1
  from dual
 connect by level < 10)

 select * from t join t2 on nvl(t.id1,-1) = nvl(nvl(t2.id1,t.id1),-1) and t.id = t2.id 
order by 1,2



столбец id указан просто для примера, на него не стоит ориентироваться.

Тогда строка с t.id = 4 не укладывается в описанную логику.
Так как t.id1 is null должен сджойниться с любой строкой, где t2.id1 is null, т.е. с 3 строками, у которы t2.id in (2,3,8).
...
Рейтинг: 0 / 0
Запрос
    #39760394
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoocobalt_frogпропущено...


столбец id указан просто для примера, на него не стоит ориентироваться.

Тогда строка с t.id = 4 не укладывается в описанную логику.
Так как t.id1 is null должен сджойниться с любой строкой, где t2.id1 is null, т.е. с 3 строками, у которы t2.id in (2,3,8).

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


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