Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос [D6]


Страницы:   1 2

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 причём такие, которые не выбраны в первый раз

и прочти записи из этой таблички


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо