powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли избавиться от nvl в условии соединения?
4 сообщений из 4, страница 1 из 1
Можно ли избавиться от nvl в условии соединения?
    #39905078
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть такой запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
with
c as
(
  select 0 c from dual where 0=1
  union all select 1 from dual
  union all select 2 from dual
  union all select 3 from dual
)
, t as
(
  select 0 t, 0 g, 0 demo from dual where 0=1
  union all select 1, 1, 1 from dual
  union all select 2, 1, null from dual
  union all select 3, 2, null from dual
)
, s as
(
  select 0 s, 0 c, 0 t from dual where 0=1
  union all select 11, 1, 1 from dual
  union all select 12, 1, 2 from dual
  union all select 21, 2, 1 from dual
  union all select 31, 3, 2 from dual
  union all select 32, 3, 3 from dual
)
, s1 as (select * from s join t using (t) where g = 1 and demo=1)
, s2 as (select * from s join t using (t) where g = 1)
select c.c, s2.s, s2.t, s2.g
from c
left join s1 on (s1.c = c.c)
join s2 on (s2.c = c.c and s2.s != nvl(s1.s,0))
order by c, s


c это список родительских записей, s это набор дочерних записей.
Вообще отношение между ними 1:M, но для конкретного типа записей всегда соблюдается необязательная связь 1:1 (у c может быть 0 или 1 запись s).
У некоторых дочерних записей может быть вычисляемый специальный признак, наличие которого необходимо обрабатывать особо. Поэтому у меня в запросе два альяса s1 и s2; s2 это основной, а s1 это более "специализированный", в котором проверяется специальный признак.
Мне нужно получить набор записей, в которых у дочерних записей отсутствует специальный признак.
Приложенный запрос это делает, но в нем используется функция nvl в условии соединения.
А можно ли обойтись без функции?
...
Рейтинг: 0 / 0
Можно ли избавиться от nvl в условии соединения?
    #39905172
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
with
c (c) as
(
            select 1 from dual
  union all select 2 from dual
  union all select 3 from dual
)
, t (t, g, demo) as
(
            select 1, 1, 1 from dual
  union all select 2, 1, null from dual
  union all select 3, 2, null from dual
)
, s (s, c, t) as
(
            select 11, 1, 1 from dual
  union all select 12, 1, 2 from dual
  union all select 21, 2, 1 from dual
  union all select 31, 3, 2 from dual
  union all select 32, 3, 3 from dual
)
select c.c, s.s, s.t, t.g
  from c, s, t
 where c.c = s.c
   and t.t = s.t
   and t.g = 1
   and ( t.demo != 1 or t.demo is null )
...
Рейтинг: 0 / 0
Можно ли избавиться от nvl в условии соединения?
    #39905218
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
альяс
У тебя алоэ цветёт?
...
Рейтинг: 0 / 0
Можно ли избавиться от nvl в условии соединения?
    #39905250
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

гляньте LNNVL(s2.s = s1.s), мож Вам подойдет

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


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