Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Варианты запроса / 12 сообщений из 12, страница 1 из 1
18.04.2018, 19:17
    #39632797
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
Добрый день,

Код: plsql
1.
create table tmp(a number,b number);


param1 и param2 какие либо значения, по которым надо найти записи таблице tmp.

Код: plsql
1.
2.
3.
4.
5.
select  1
  from  tmp
 where  (a is null  or  param1  is null or a = param1)
   and  (b is null  or  param2  is null or b = param2)
   and  (a = param1 or b = param2)



Есть табилца tmp, в ней значения а и b. Обязательно должно быть либо совпадение a с param1, либо b c param2, либо выполняться оба условия. a,b,param1 и param2 могут быть null.
При этом не может быть, что для для не null значений может быть a<>param1 или b<>param2.
Глаз замылился, может у кого есть способ по лучше представленного мною?
Всем спасибо.
...
Рейтинг: 0 / 0
18.04.2018, 20:02
    #39632817
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
cobalt_frog,

Похоже Вы ищите что-то такое

Код: plsql
1.
2.
3.
select *
from tmp
where (nvl(:param1,-1) = nvl(a,-1) or nvl(:param2,-1) = nvl(b,-1))


где "-1" - заведомо отсутствующее значение
...
Рейтинг: 0 / 0
18.04.2018, 20:21
    #39632824
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
Код: 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.
with  tmp(a,b) as (select 1, 1
from dual union all select 1, 2
from dual union all select null, 2
from dual union all select null, 1
from dual union all select 1, null
from dual union all select null, null
from dual
), prm(param1, param2) as ( select * from tmp)
select  prm.*, tmp.*
  from  tmp, prm
 where (a=param1 or b=param2)
   and lnnvl(a<>param1)
   and lnnvl(b<>param2)
order by param1,param2,a,b
;
    PARAM1     PARAM2          A          B
---------- ---------- ---------- ----------
         1          1          1          1
         1          1          1 
         1          1                     1
         1          2          1          2
         1          2          1 
         1          2                     2
         1                     1          1
         1                     1          2
         1                     1 
                    1          1          1
                    1                     1
                    2          1          2
                    2                     2
...
Рейтинг: 0 / 0
19.04.2018, 09:04
    #39632943
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
MaximaXXL,

неa, напр все 4 null

.....
stax
...
Рейтинг: 0 / 0
19.04.2018, 09:12
    #39632945
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
Всем спасибо
...
Рейтинг: 0 / 0
19.04.2018, 09:19
    #39632953
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
cobalt_frogПри этом не может быть, что для не null значений может быть a<>param1 или b<>param2.
Можете перефразировать?
...
Рейтинг: 0 / 0
19.04.2018, 10:00
    #39632977
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
Dshedoocobalt_frogПри этом не может быть, что для не null значений может быть a<>param1 или b<>param2.
Можете перефразировать?

Если a и param1 не null, то они должны быть равны. Аналогично для не null и и param2 должно быть b=param2.

andrey_anonymous дал верный вариант.
...
Рейтинг: 0 / 0
19.04.2018, 10:26
    #39632997
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
Код: plsql
1.
2.
   (a = param1 and nvl(nvl(b,param2),-1) = nvl(nvl(param2,b),-1))
or (b = param2 and nvl(nvl(a,param1),-1) = nvl(nvl(param1,a),-1))
...
Рейтинг: 0 / 0
19.04.2018, 23:25
    #39633450
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
decode(a, param1, 1)=1 or decode(b, param2, 1)=1
...
Рейтинг: 0 / 0
19.04.2018, 23:47
    #39633455
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
cobalt_frog,
Тут как раз чистил почту,нашел в старом письме, делился с однокашником найденным на прошлой работе (на втором году работы), как раз по теме

Код: plsql
1.
2.
3.
select  тут поля, поля , поля
from  таблицаХХХ
where not (  YYY is null);



Запрос к базовому справочнику, тягается много лет в разных проектах.
...
Рейтинг: 0 / 0
20.04.2018, 08:28
    #39633508
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
Вячеслав Любомудров,

21350879

.....
stax
...
Рейтинг: 0 / 0
20.04.2018, 09:11
    #39633531
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты запроса
Вариант от andrey_anonymous самый кошерный на мой взгляд.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Варианты запроса / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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