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

есть таблица:

Код: plsql
1.
2.
3.
create table t2(id number,id2 number);
insert into t2(id, id2) select level,level*10 from dual connect by level <1000;
update t2 t set t.id2 = 800 where t.id between 100 and 200;



Есть параметр value, который может быть null, необходимо найти все записи у которых id2 = value,
если value при этом null, то необходимо возвращать все записи.
В голову приходит только решение:
Код: plsql
1.
2.
3.
4.
select  *
  from  t2 t
 where  (t.id in (select id from t2 t2 where t2.id2 = :value)
          or not exists(select id from t2 t2 where t2.id2 = :value))


Есть ли у кого нить решения покрасивше?
Всем спасибо.
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584937
cobalt_frog,

OR и IS NULL в школе, конечно же, не проходили?
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584939
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frog,

where id2 = value or value is null
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584940
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogЕсть параметр value, который может быть null, необходимо найти все записи у которых id2 = value,
если value при этом null, то необходимо возвращать все записи.Нельзя же быть настолько тупым. Это дословно именно так и формулируется на SQL:
Код: plsql
1.
(:valie is null or id2 = :value)


cobalt_frogВ голову приходит только решение:Бред.
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584948
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пример был неудачный, суть в том, что значения id нужно взять из другой таблицы:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table t2(id number);
insert into t2(id) select level,level*10 from dual connect by level <1000;

create table t3(id number,id2 number);
insert into t3(id, id2) select level,level*10 from dual connect by level <1000;

update t3 t set t.id2 = 800 where t.id between 100 and 200;

select  *
  from  t2 t
 where  (t.id in (select id from t3 t3 where t3.id2 = :t)
          or not exists(select id from t3 t3 where t3.id2 = :t))
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584949
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table t2(id number);
insert into t2(id) select level from dual connect by level <1000;

create table t3(id number,id2 number);
insert into t3(id, id2) select level,level*10 from dual connect by level <1000;

update t3 t set t.id2 = 800 where t.id between 100 and 200;

select  *
  from  t2 t
 where  (t.id in (select id from t3 t3 where t3.id2 = :t)
          or not exists(select id from t3 t3 where t3.id2 = :t))
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584956
cobalt_frog,

и что это меняет?
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584965
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frog,

Код: plsql
1.
2.
3.
select t2.*
from t2 left join (select id, id2 from t3 where t3.id2 = :t) tt on t2.id=tt.id
where nvl(t3.id2,-1) = nvl(:t,-1) 

?
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584975
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Воронцовcobalt_frog,

Код: plsql
1.
2.
3.
select t2.*
from t2 left join (select id, id2 from t3 where t3.id2 = :t) tt on t2.id=tt.id
where nvl(t3.id2,-1) = nvl(:t,-1) 

?

только:

Код: plsql
1.
where nvl(tt.id2,-1) = nvl(:t,-1) 



Спс, заработает конечно, только хотелось бы чего нить покрасивее)
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584990
cobalt_frog,

критерии красоты огласи. А то так-то оно "кому и кобыла - невеста" (с)
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39584993
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogпокрасивее) 21109966
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39585015
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно так:

Код: plsql
1.
2.
3.
4.
select *
  from  t2 t
        left join (select id from t3 where t3.id2 = :t) t3 on  t.id = t3.id
 where  t.id = nvl2(:t,t3.id,t.id) 
...
Рейтинг: 0 / 0
Интересный запрос 2
    #39585060
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
select *
  from  t2
        ,t3 
 where  t2.id     = nvl2(:t,t3.id,t2.id)
   and  t2.id     = t3.id(+)
   and  t3.id2(+) = :t
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интересный запрос 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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