SQL: получить случайную запись, если условие ложно - PullRequest
0 голосов
/ 08 сентября 2010

Использование Firebird:

Я хочу выбрать случайную запись в таблице, если первый запрос SQL возвращает 0 строк. Есть ли способ объединить эти два запроса?

SELECT * FROM table WHERE cond=1;

SELECT FIRST 1 * FROM table ORDER BY rand();

Я использую ExecuteNativeQuery на стороне java, которая принимает базовые операторы SQL. К сожалению, заявления If-Else не работают. И если бы я мог сделать один запрос к базе данных вместо двух, это сделало бы мой код более быстрым.

Ответы [ 2 ]

0 голосов
/ 08 сентября 2010

попробуйте это: не уверен, но думаю, что это будет работать ...

Select FIRST 1 t1.* 
FROM table t1
   left Join Table t2
      On t2.pk = t1.pk
         And t2.cond=1
ORDER BY Case When t2.Cond = 1 
              Then 0 Else rand() End  
0 голосов
/ 08 сентября 2010
if(exists(select 1 from table where cond=1))
SELECT * FROM table WHERE cond=1;
else
SELECT FIRST 1 * FROM table ORDER BY rand();

как-то так, хотя я забыл, нужно ли ключевое слово then в операторах if в базах данных FirebirdSQL.

...