![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос [D6]
Ann © (2003-05-16 08:43:00)Добрый день!
Никак не могу правильно написать запрос... Подскажите пожалуйста.
Есть вот такой запрос
SELECT
SPR.ART_ID,
SPR.NAME,
SPR.GROUP_ID,
SPR.DELETE_PR,
SPR_A.RDATA,
SPR_A.GOST,
SPR_A.EAN13,
SPR_A.DELETE_PR
FROM
SPRART SPR,
SPRARTP SPR_A
where (SPR_A.ART_ID=SPR.ART_ID) AND SPR_A.RDATA=(SELECT MAX(S.RDATA) FROM SPRARTP S WHERE S.ART_ID=SPR.ART_ID AND S.DELETE_PR=0)
Он вибирает из двух таблиц, причем из второй таблицы записи, соответствующие первой таблице по art_id и с максимальной датой и при условии что delete_pr=0.
Но встала проблема что если во второй таблице нет соответствующей строки с delete_pr=0, то тогда нужно выбрать с максимальной датой и с delete_pr=1.
Подскажите пожалуйста.
Ann (2003-05-16 09:16:00) [21]fireBird
neXt (2003-05-16 09:13:00) [22]
> Ann © (16.05.03 08:58)
а какое СУБД?
Ann (2003-05-16 09:10:00) [23]
> VAleksey © (16.05.03 09:04)
неа так не получится..
тогда если соответствующих записей много, то он выберет максимальную независимо от того какой признак delete_pr, а мне надо чтобы с delete_pr=1 он выбирал только тогда когда с 0 нет
neXt (2003-05-16 09:08:00) [24]VAleksey © (16.05.03 09:04)
так он вернёт и с DELETE_PR=0 и с S.DELETE_PR=1
VAleksey (2003-05-16 09:04:00) [25]а если так?
=(SELECT DISTINCT MAX(S.RDATA) FROM SPRARTP S WHERE S.ART_ID=SPR.ART_ID AND (S.DELETE_PR=0 OR S.DELETE_PR=1))
Rol (2003-05-16 09:01:00) [26]Возьми любую доку по сиквелу и сообразишь :)
Ann (2003-05-16 08:58:00) [27]
> neXt © (16.05.03 08:56)
а как через Union не подскажешь? никак не могу сообразить :(
Ann (2003-05-16 08:56:00) [28]так у меня именно проблема в том что никак не получается написать запрос типа выбрать все по приведенному запросу, а если нет соответствующей строки во второй таблице то выбрать с delete_pr=1 (только при условии что нет соответствующей с 0)
neXt (2003-05-16 08:56:00) [29]в принцыпе, можно сделать и одним запросом через UNION
в первой части читаешь записис с датой DELETE_PR=0
во второй читаешь записси с датой DELETE_PR=1 для которых нет DELETE_PR=0
с точки зрения производительности, такой вариант может быть хуже, но выглядеть будет компактней
neXt (2003-05-16 08:52:00) [30]ну выбери с инсёртом во временную таблицу сначало записи с датой по условию DELETE_PR=0
вторым запросом, тудажу, выбери по условию в сабквери DELETE_PR=1 причём такие, которые не выбраны в первый раз
и прочти записи из этой таблички