powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Case in interbase Delhi
18 сообщений из 18, страница 1 из 1
Case in interbase Delhi
    #38440778
lhjpljd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро. Нужна ваша помощь.

В кратце, в запросе мне нужно выдавать всех пациентов у которых priz=0 за всё время

(запрос выглядит так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select  p.pid as PID, k.fam as F, k.im1 as IM, k.im2 as OT, d.doct_tn,n.razd_isl,z.name as r,o.name as n,s.num as pp,d.dat_p as POST,n.razd_isl as raz,d.prizn as priz,d.status as st
from pp_next n, pp_table p, pal_doct d, palata t, people k ,sp_palat s
join dict z on z.code =n.razd_isl and z.type_s=4
join dict o on o.code =d.status and o.type_s=312

where
 d.palat_id=t.id_palata
 and t.pazient=n.id_next
 and n.pp_table=p.id_table
 and n.p_prizn=0 and n.dat_v is null
  and t.pr=0 and p.pid=k.pid
and s.id_sppal=t.n_palat


)
и пациентов с priz=1 только за сегодняшний день (запрос тот же но добавляется в условие поверка на дату поступления
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select  p.pid as PID, k.fam as F, k.im1 as IM, k.im2 as OT, d.doct_tn,n.razd_isl,z.name as r,o.name as n,s.num as pp,d.dat_p as POST,n.razd_isl as raz,d.prizn as priz,d.status as st
from pp_next n, pp_table p, pal_doct d, palata t, people k ,sp_palat s
join dict z on z.code =n.razd_isl and z.type_s=4
join dict o on o.code =d.status and o.type_s=312

where [color=red]date_p=datetostr(date)[/color]
 and d.palat_id=t.id_palata
 and t.pazient=n.id_next
 and n.pp_table=p.id_table
 and n.p_prizn=0 and n.dat_v is null
 and t.pr=0 and p.pid=k.pid
 and s.id_sppal=t.n_palat



), я не могу понять как мне сделать это через case

вот запрос
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440786
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lhjpljd,

для начала
1. переделай всё на явный join
2. пользуйся тэгами src при оформлении sql запросов (глаз сломаешь читать)
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440837
lhjpljd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

переделать всё что в условии после where ?
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440863
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lhjpljd,

Код: sql
1.
2.
3.
from pp_next n, pp_table p, pal_doct d, palata t, people k ,sp_palat s
join dict z on z.code =n.razd_isl and z.type_s=4
join dict o on o.code =d.status and o.type_s=312



нельзя так делать. Либо все таблицы пишешь через запятую и связываешь их в WHERE, либо всё пишешь с помощью join.

join dict z on z.code =n.razd_isl and z.type_s=4

здесь z.type_s=4 лучше вынести в where, а on оставлять только условия связи.
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440870
lhjpljd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

join отрабатывают у меня правильно, мне нужно как сделать выборку если d.priz=0 то всех выдавать , если d.priz=1 то только за текущий день, вот в чём состоит моя проблема, я не знаю как это организовать
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440897
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lhjpljd,

Код: sql
1.
(d.priz=0 or (d.priz=1 and date_p=CURRENT_DATE))



вообще конечно надо указать к какой таблице относится date_p

case тут не причём
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440911
lhjpljd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

при таком условии у меня эксперт повис))) дата относится к d.date_p
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440914
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lhjpljdjoin отрабатывают у меня правильно,
нет. делай как говорят. Не веришь - читай http://www.ibase.ru/devinfo/joins.htm
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440923
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lhjpljdСимонов Денис,

при таком условии у меня эксперт повис))) дата относится к d.date_p

сначала переделай JOIN. Потом получи план из эксперта и выложи его сюда.
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440952
lhjpljd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select  p.pid as PID, k.fam as F, k.im1 as IM, k.im2 as OT, d.doct_tn,n.razd_isl,z.name as r,o.name as n,s.num as pp,d.dat_p as POST,n.razd_isl as raz,d.prizn as priz,d.status as s

from pp_next n, pp_table p, palata t, people k ,sp_palat s

inner join pal_doct d on (d.prizn=0 or (d.prizn=1 and d.dat_p='18.10.2013'))  and d.palat_id=t.id_palata
and t.pazient=n.id_next
and n.pp_table=p.id_table
and n.p_prizn=0 and n.dat_v is null
and t.pr=0 and p.pid=k.pid
and s.id_sppal=t.n_palat

inner join dict z on z.code =n.razd_isl and z.type_s=4
inner join dict o on o.code =d.status and o.type_s=312



всё спасибо,сделал- работает
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440981
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lhjpljdfrom pp_next n, pp_table p, palata t, people k ,sp_palat s
inner join pal_doct
ничего ты не переделал. Все равно фигня написана.
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440989
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lhjpljd,

рано радуешься. Ты такую ересь написал....

в условии on должны быть только условия связи для тех таблиц которые ты связываешь, а не для всех. У kdv в статье всё же понятно написано. Перечитай столько раз пока не поймёшь и только потом переписывай запрос.
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38440997
lhjpljd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всё ровно я не понял))
типо этого ?
Код: sql
1.
2.
3.
inner join pal_doct d on  d.palat_id=t.id_palata
inner join dict z on z.code =n.razd_isl
inner join dict o on o.code =d.status
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38441002
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lhjpljd,

да. Только так должно быть написано для всех таблиц из этого списка
pp_next n, pp_table p, palata t, people k ,sp_palat s
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38441019
lhjpljd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select  p.pid as PID, k.fam as F, k.im1 as IM, k.im2 as OT, d.doct_tn,n.razd_isl,z.name as r,o.name as n,s.num as pp,d.dat_p as POST,n.razd_isl as raz,d.prizn as priz,d.status as s,c.fam,c.im1,c.im2

from  pp_table p , people k ,cadry C

 inner join pp_next n on n.pp_table=p.id_table
 inner join palata t on t.pazient=n.id_next
 inner join sp_palat s on s.id_sppal=t.n_palat
 inner join pal_doct d on  d.palat_id=t.id_palata
 inner join dict z on z.code =n.razd_isl
 inner join dict o on o.code =d.status

where 
(d.prizn=0 or (d.prizn=1 and d.dat_p='11.10.2013')) and d.doct_tn=C.tn
and n.p_prizn=0 and n.dat_v is null
and t.pr=0 and p.pid=k.pid
and z.type_s=4
and o.type_s=312


теперь похоже на божеский види или всё ровно я лопух?))
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38441030
lhjpljd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lhjpljdСимонов Денис,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select  p.pid as PID, k.fam as F, k.im1 as IM, k.im2 as OT, d.doct_tn,n.razd_isl,z.name as r,o.name as n,s.num as pp,d.dat_p as POST,n.razd_isl as raz,d.prizn as priz,d.status as s,c.fam,c.im1,c.im2

from  pp_table p , people k ,cadry C

 inner join pp_next n on n.pp_table=p.id_table
 inner join palata t on t.pazient=n.id_next
 inner join sp_palat s on s.id_sppal=t.n_palat
 inner join pal_doct d on  d.palat_id=t.id_palata
 inner join dict z on z.code =n.razd_isl
 inner join dict o on o.code =d.status

where 
(d.prizn=0 or (d.prizn=1 and d.dat_p='11.10.2013')) and d.doct_tn=C.tn
and n.p_prizn=0 and n.dat_v is null
and t.pr=0 and p.pid=k.pid
and z.type_s=4
and o.type_s=312


теперь похоже на божеский види или всё ровно я лопух?))



вот теперь вроде всё

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select  p.pid as PID, k.fam as F, k.im1 as IM, k.im2 as OT, d.doct_tn,n.razd_isl,z.name as r,o.name as n,s.num as pp,d.dat_p as POST,n.razd_isl as raz,d.prizn as priz,d.status as s,c.fam,c.im1,c.im2

from  people k
 inner join pp_table p on p.pid=k.pid
 inner join pp_next n on n.pp_table=p.id_table
 inner join palata t on t.pazient=n.id_next
 inner join sp_palat s on s.id_sppal=t.n_palat
 inner join pal_doct d on  d.palat_id=t.id_palata
 inner join cadry C on d.doct_tn=C.tn
 inner join dict z on z.code =n.razd_isl
 inner join dict o on o.code =d.status

where 
(d.prizn=0 or (d.prizn=1 and d.dat_p='11.10.2013'))
and n.p_prizn=0 and n.dat_v is null
and t.pr=0
and z.type_s=4
and o.type_s=312
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38441035
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lhjpljd,

последний вариант ок. и слово inner необязательное (в отличие от left и right).
...
Рейтинг: 0 / 0
Case in interbase Delhi
    #38441043
lhjpljd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

спасибо вам, теперь я наконец-то понял свои ошибки с join
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Case in interbase Delhi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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