Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Определить условие, по которому запись не отобралась  [new]
kasik
Member

Откуда:
Сообщений: 2142
Есть допустим запросик
select * 
from tbl
where 
--услоние 1
fld1 = 1
--услоние 2
and fld2 = 2
--услоние 3
and fld3 = 3

Как определить из-за какого условия запись была забракована, и как нибудь эту информацию вывести?
18 июл 11, 16:33    [10990420]     Ответить | Цитировать Сообщить модератору
 Re: Определить условие, по которому запись не отобралась  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4917
Блог
kasik,

Как вариант - с помощью CASE ... WHEN
18 июл 11, 16:39    [10990460]     Ответить | Цитировать Сообщить модератору
 Re: Определить условие, по которому запись не отобралась  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
kasik,

select (case when fld1=1 then null else 'первое условие не выполнено' end) fld1
  ,(case when fld2=2 then null else 'второе условие не выполнено' end) fld2
  ,(case when fld3=3 then null else 'третье условие не выполнено' end) fld3
from tbl
where 
--услоние 1
lnnvl(fld1 = 1)
--услоние 2
or lnnvl( fld2 = 2)
--услоние 3
or lnnvl(fld3 = 3)
;
18 июл 11, 16:41    [10990471]     Ответить | Цитировать Сообщить модератору
 Re: Определить условие, по которому запись не отобралась  [new]
kasik
Member

Откуда:
Сообщений: 2142
Сергей Арсеньев
kasik,

lnnvl(fld1 = 1)


ругается на знаке "=" в скобках.
ORA-00907: missing right parenthesis 
18 июл 11, 16:48    [10990527]     Ответить | Цитировать Сообщить модератору
 Re: Определить условие, по которому запись не отобралась  [new]
kasik
Member

Откуда:
Сообщений: 2142
сорри вместо l i писал
18 июл 11, 16:54    [10990570]     Ответить | Цитировать Сообщить модератору
 Re: Определить условие, по которому запись не отобралась  [new]
kasik
Member

Откуда:
Сообщений: 2142
Сергей Арсеньев,

Спасибо направление понял, допиливаю под свои нужды!
18 июл 11, 17:03    [10990670]     Ответить | Цитировать Сообщить модератору
 Re: Определить условие, по которому запись не отобралась  [new]
kasik
Member

Откуда:
Сообщений: 2142
Продолжим немного,
если у меня допустим есть следующие данные
FLD3FLD2FLD1
1
2
2 1
3 2 1


соответственно по задаче должно вывестись все записи, но с указанием какие поля не отработали, от имеем что в первом селекте(первый пост) отберется одна запись(как и должно быть по логике запроса, но нам надо еще знать почему же другие не отобрались), во втором селекте мы получим все записи, кроме искомой, но опять же нам надо все, и которые вошли и которые не вошли, с причинами, тогда имеет место вот такой запрос:
select tbl.*, (case when fld1=1 then null else '-' end) fld1
  ,(case when fld2=2 then null else '-' end) fld2
  ,(case when fld3=3 then null else '-' end) fld3
from tbl
where 
--услоние 1
fld1 = 1
--услоние 2
or  fld2 = 2
--услоние 3
or fld3 = 3
;
получается для чего нам lnnvl?
Но идем дальше и получается, что запрос выраждается просто в:
select tbl.*, (case when fld1=1 then null else '-' end) fld1
  ,(case when fld2=2 then null else '-' end) fld2
  ,(case when fld3=3 then null else '-' end) fld3
from tbl;
То есть секцию where вообще не нужна получается...

но это частный случай, а когда в запросе учавствуют много связанных таблиц, то такое уже не пройдет, потому что мы получим скалярное перемножение всех таблиц и будет оч много строк.

как тогда быть, если есть все такие определяющий критерий уникальности записи, но и в нем может быть кося и нам нодо будет знать в каком именно поле?
25 июл 11, 14:51    [11023274]     Ответить | Цитировать Сообщить модератору
 Re: Определить условие, по которому запись не отобралась  [new]
XCB
Member

Откуда:
Сообщений: 727
kasik
но это частный случай, а когда в запросе учавствуют много связанных таблиц, то такое уже не пройдет, потому что мы получим скалярное перемножение всех таблиц и будет оч много строк.

так может разделять условия соединения таблиц и условия отбраковки? первые в условии where стоит оставить...
25 июл 11, 16:00    [11023780]     Ответить | Цитировать Сообщить модератору
 Re: Определить условие, по которому запись не отобралась  [new]
kasik
Member

Откуда:
Сообщений: 2142
XCB
...
так может разделять условия соединения таблиц и условия отбраковки? ...


Это и является верным решением - на практике реализовал вот теперь переосмысливаю, что сделал и почему так.
Спасибо
25 июл 11, 16:21    [11023913]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить