powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с запросом
6 сообщений из 6, страница 1 из 1
помогите с запросом
    #34689086
ignitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пойму никак, что неправильно?

Запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select accanl.accanl_pic,percent.idcontract,restanl.restnc,
(select case when fvaluedia.fvalue is not null then fvaluedia.fvalue  else objname.namename end)::bpchar as cl
from 
accanl join 
percent on percent.idaccanl=accanl.id join
contract on percent.idcontract=contract.id join 
objname on (contract.idcnt_target=objname.idobject and idname= 6 ) join
restanl on (accanl.id=restanl.idaccanl and restanl_date='2007-07-26'::date) left join 
fvaluedia on (percent.idcontract=fvaluedia.idrow and fvaluedia.idfeature= 30358684 )
where accsin1='455' and substr(accanl_pic, 4 , 2 )<>'15' and dateopen<='2007-07-26'::date and (dateclose is null or dateclose>'2007-07-26'::date) 
group by accanl_pic,percent.idcontract,fvaluedia.fvalue,restanl.restnc,objname.namename ;

в поле cl , где
Код: plaintext
fvaluedia.fvalue is not null
почему-то возвращает null, хотя objname.namename возвращает по условию правильно.
Мне нужно, чтобы если fvaluedia.fvalue не пустое возвращалось его значение.
И fvaluedia.fvalue и objname.namename - строки.
...
Рейтинг: 0 / 0
помогите с запросом
    #34689253
ignitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решил вопрос

в условиях поменял на
Код: plaintext
trim(fvaluedia.fvalue) <>''

и все заработало. Еще бы понять почему?
...
Рейтинг: 0 / 0
помогите с запросом
    #34689318
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы уверены, что в первом варианте, возвращалась именно null, а не пустая строка (строка с пробелами)?
...
Рейтинг: 0 / 0
помогите с запросом
    #34689407
ignitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если
fvaluedia.fvalue is null и fvaluedia.fvalue =''
не тождественные условия, то уверен, а так же верно утверждение о том, что при левом объединении при отсутствии подходящей записи возвращаются значения типа null, то уверен.
...
Рейтинг: 0 / 0
помогите с запросом
    #34689609
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
экспиременты говорят, что у вас в fvaluedia.fvalue все-таки встречаются пустые строки (либо же баг в pg)

Код: plaintext
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.
postgres=# select * from t1;
 f1 | f2
----+----
   1  | a
   2  | b
   3  | c
   4  | d
( 4  rows)

postgres=# select * from t2;
 f1 | f2
----+-----
   1  | one
   2  | two
   4  |      <= здесь в f2 пустая строка ('')
( 3  rows)

postgres=# select t1.*, t2.*, t2.f2 is not null, trim(t2.f2) <> '', case when t2.f2 is not null then  1  else  2  end, case when trim(t2.f2) <> '' then  1 
else  2  end from t1 left join t2 on (t2.f1 = t1.f1);
 f1 | f2 | f1 | f2  | ?column? | ?column? | case | case
----+----+----+-----+----------+----------+------+------
   1  | a  |   1  | one | t        | t        |     1  |     1 
   2  | b  |   2  | two | t        | t        |     1  |     1 
   3  | c  |    |     | f        |          |     2  |     2 
   4  | d  |   4  |     | t        | f        |     1  |     2 
( 4  rows)
...
Рейтинг: 0 / 0
помогите с запросом
    #34690953
ignitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select count(*),cl from
(select accanl.accanl_pic,percent.idcontract,restanl.restnc,
(select case when fvaluedia.fvalue is not null then fvaluedia.fvalue  else objname.namename end)::bpchar as cl
from 
accanl join 
percent on percent.idaccanl=accanl.id join
contract on percent.idcontract=contract.id join 
objname on (contract.idcnt_target=objname.idobject and idname= 6 ) join
restanl on (accanl.id=restanl.idaccanl and restanl_date='2007-07-26'::date) left join 
fvaluedia on (percent.idcontract=fvaluedia.idrow and fvaluedia.idfeature= 30358684 )
where accsin1='455' and substr(accanl_pic, 4 , 2 )<>'15' and dateopen<='2007-07-26'::date and (dateclose is null or dateclose>'2007-07-26'::date)  
group by accanl_pic,percent.idcontract,fvaluedia.fvalue,restanl.restnc,objname.namename) as foo group by cl

возвращает
Код: plaintext
1.
2.
3.
4.
 32 ;"Ипотека"
 103 ;""
 654 ;"покупка автомобиля                      "
 1688 ;"потребительские                         "
Посыпаю голову пеплом ...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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