Как объединить два запроса?

Есть запрос
FROM statya s
WHERE s.del = 0
AND s.raz_id = 1
AND s.langid = 1
AND s.st_date > 1234567890 AND s.st_date < 1234567890
ORDER BY s.st_date
LIMIT 1


и если ничего не найдено, то идет такой запрос
FROM statya s
WHERE s.del = 0
AND s.raz_id = 1
AND s.langid = 1
s.st_date IS NOT NULL and s.st_date < 1234567890
ORDER BY s.st_date DESC
LIMIT 1


Как это объединить в один запрос?
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 3
Melkij
@Melkij
PostgreSQL DBA
(
    select ...
)
union all
(
    select ...
)
limit 1

В общем случае.

Какое-нибудь в частном:
FROM statya s
WHERE s.del = 0
AND s.raz_id = 1
AND s.langid = 1
s.st_date IS NOT NULL and s.st_date < 1234567890
order by if (s.st_date > 1234567890, s.st_date, 0), s.st_date DESC
limit 1
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
У вас один запрос является подмножеством другого. Как вы хотите их объединить? Вы можете исполнить второй запрос и потом выяснить является ли st_date датой в нужном промежутке.

UPD: Как вариант - пишите хранимку. Выполните первый запрос во временную таблицу и если там пусто - выполните второй. Если есть - вернуть первый.
Ответ написан
Комментировать
@zhainar
Гуглю за вас
попробуйте так
FROM statya s
WHERE s.del = 0
AND s.raz_id = 1
AND s.langid = 1
AND 
( 
(s.st_date > 1234567890 AND s.st_date < 1234567890) 
OR
(s.st_date IS NOT NULL and s.st_date < 1234567890)
)
ORDER BY s.st_date
LIMIT 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы