Страница 1 из 1
Выборка в мастер детайле и ключевое поле
Добавлено: 26 ноя 2007, 15:40
Antarey
Господа,помогите решить две проблемы:
1.- как в одной транзакции добавлять данные в мастер детайл таблицы,если к примеру
в мастер добавляется одна запись а в детал 10,хотя ето не важно.Связь делаю - автоинкриментное
поле в мастере и интежер поле в детайле,но ведь пока не пройдет транзакция ластавтоинк мастер
поля будет неизвестно??
2. - есть мастер таблица FIO char(70),MasterId AutoInc
и детайл Data DATE,MasterId INTEGER,Id AutoInc - так вот надо сделать выборку тех людей у которых к примеру 2 месяца не было движения по полю Data детайл таблицы
Re: Выборка в мастер детайле и ключевое поле
Добавлено: 26 ноя 2007, 15:57
_Mad_
Для первого случая использую хранимую процедуру, которая выдает мне текущее значение генератора.
Добавлено: 26 ноя 2007, 16:18
kdv
но ведь пока не пройдет транзакция ластавтоинк мастер
поля будет неизвестно??
ух, ох....
www.ibase.ru/devinfo/generator.htm
ПОЛУЧИТЕ СНАЧАЛА ЗНАЧЕНИЕ ГЕНЕРАТОРА ДЛЯ МАСТЕРА.
И ИСПОЛЬЗУЙТЕ его в детали.
у которых к примеру 2 месяца не было движения по полю Data детайл таблицы
www.ibase.ru/devinfo/joins.htm
плюс условие по дате.
Добавлено: 26 ноя 2007, 16:26
kdv
_Mad_ писал(а):первого случая использую хранимую процедуру, которая выдает мне текущее значение генератора.
а зачем процедура? и "текущее" - это как?
Добавлено: 27 ноя 2007, 08:43
stix-s
kdv писал(а):_Mad_ писал(а):первого случая использую хранимую процедуру, которая выдает мне текущее значение генератора.
а зачем процедура? и "текущее" - это как?
наверное, что-то вроде
select gen_id(my_gen, 0) from rdb$database, только вот зачем в случае использования IBX (FIB+) и зачем в процедуре?
Добавлено: 27 ноя 2007, 10:48
_Mad_
stix-s писал(а):kdv писал(а):_Mad_ писал(а):первого случая использую хранимую процедуру, которая выдает мне текущее значение генератора.
а зачем процедура? и "текущее" - это как?
наверное, что-то вроде
select gen_id(my_gen, 0) from rdb$database, только вот зачем в случае использования IBX (FIB+) и зачем в процедуре?
Имеется ввиду сгенерил ID для мастер таблицы в процедуре
(вот так ID=gen_id(my_Gen,1)), а потом его использую в детейл таблице
Добавлено: 27 ноя 2007, 10:49
Antarey
kdv писал(а):но ведь пока не пройдет транзакция ластавтоинк мастер
поля будет неизвестно??
ух, ох....
www.ibase.ru/devinfo/generator.htm
ПОЛУЧИТЕ СНАЧАЛА ЗНАЧЕНИЕ ГЕНЕРАТОРА ДЛЯ МАСТЕРА.
И ИСПОЛЬЗУЙТЕ его в детали.
у которых к примеру 2 месяца не было движения по полю Data детайл таблицы
www.ibase.ru/devinfo/joins.htm
плюс условие по дате.
Как соединить по джоин я знаю,меня интересует как раз условие по дате,просто не прикольно перелопачивать всю базу по каждой записи в мастере и соответствующему фильтру в детайле.
Если поставить Дата<'чето там' запрос выберет и тех у которых есть движение и после указаного периода.Дата = Нул - выберет у которых ваще нет движения,а мне надо выбрать тех у кого не было двыжения больше указаного срока.
Добавлено: 27 ноя 2007, 11:36
stix-s
_Mad_ писал(а):
Имеется ввиду сгенерил ID для мастер таблицы в процедуре
(вот так ID=gen_id(my_Gen,1)), а потом его использую в детейл таблице
это уж не текущее

а следующее с шагом 1
и все равно не понял, зачем в процедуре?
у компонентов FIB+ (может и в IBX так же называется - не помню)есть такое интересное свойство AutoUpdateOptions и при инсерте запросто получается новое значение генератора
Добавлено: 27 ноя 2007, 11:39
stix-s
Antarey писал(а):
Если поставить Дата<'чето там' запрос выберет и тех у которых есть движение и после указаного периода.Дата = Нул - выберет у которых ваще нет движения,а мне надо выбрать тех у кого не было двыжения больше указаного срока.
если уж нуллы так нужны добавить в условие is not null никак?
Добавлено: 27 ноя 2007, 12:57
Antarey
stix-s писал(а):Antarey писал(а):
Если поставить Дата<'чето там' запрос выберет и тех у которых есть движение и после указаного периода.Дата = Нул - выберет у которых ваще нет движения,а мне надо выбрать тех у кого не было двыжения больше указаного срока.
если уж нуллы так нужны добавить в условие is not null никак?
Вопрос о нулах не подымался,там априори движение будет,
повторяю еще раз надо выбрать тех у кого не было движения 2 мес
Добавлено: 27 ноя 2007, 13:07
kdv
повторяю еще раз надо выбрать тех у кого не было движения 2 мес
фирма left join движение
где движение is null и дата движения = указанный интервал
опять же см. joins.htm
Добавлено: 27 ноя 2007, 13:40
stix-s
Antarey писал(а):
Вопрос о нулах не подымался,там априори движение будет,
повторяю еще раз надо выбрать тех у кого не было движения 2 мес
ну про нуллы не я первый заговорил
если наконец-то правильно понял, то в мастере - персоналии, в подчиненной множество записей дат для каждого персоналия, когда было какое либо телодвижение?
причем дата этого телодвижения бывает null?
Добавлено: 28 ноя 2007, 11:58
Antarey
Вопрос снимается
Если кому интересно
Код: Выделить всё
select Biling."FIO",Biling."Gorod",Biling."Street",max(Dvig."Data") LastOp
from Biling a
left join Dvig b on a.BilingId=b.BilingId
where max(b."Data")<'30.03.2007' or b."Data"=NULL
group by Biling."FIO",Biling."Gorod",Biling."Street"
ORDER BY Biling."FIO";
Добавлено: 28 ноя 2007, 13:13
kdv
max(b."Data")<'30.03.2007' or b."Data"=NULL
прикольно. что max в where что data = null

Добавлено: 28 ноя 2007, 13:29
Antarey
kdv писал(а):max(b."Data")<'30.03.2007' or b."Data"=NULL
прикольно. что max в where что data = null

не нравится веа используй хевигн,результат тотже,
А по поводу нул - как ты отбереш записи мастера в которых в детайле
ваще не было движения??

Добавлено: 28 ноя 2007, 13:55
belov-evgenii
b.data is null
Добавлено: 28 ноя 2007, 14:56
kdv
не нравится веа используй хевигн,результат тотже,
А по поводу нул - как ты отбереш записи мастера в которых в детайле
ваще не было движения??
ты меня с кем-то спутал. это мои сайт, форум, и статья про join (как минимум).