2010-09-08 11 views
0

Utiliser Firebird:SQL: Obtenir une entrée aléatoire ssi condition est fausse

Je veux sélectionner une entrée aléatoire dans la table si la première requête SQL retourne 0 lignes. Est-il possible de combiner ces deux requêtes? Im utilisant ExecuteNativeQuery sur le côté java qui prend des instructions SQL de base. Malheureusement, les instructions If-Else ne fonctionnent pas. Et si je pouvais faire une seule requête à la base de données au lieu de deux, cela rendrait mon code plus rapide.

Répondre

0

essayez ceci: Je ne sais pas, mais pense que ça va fonctionner ...

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

On dirait prometteur, mais là où la condition est où je suis coincé. Il renvoie 0 lignes si la condition n'est pas remplie. En outre, l'ordre est-il par et où les conditions supposées être inversées? – Adrian

+0

ahhh oui, mettre condition dans Join conditions ... édité pour corriger ... –

+0

Il semble contourner la condition, et renvoie juste une ligne aléatoire. – Adrian

0
if(exists(select 1 from table where cond=1)) 
SELECT * FROM table WHERE cond=1; 
else 
SELECT FIRST 1 * FROM table ORDER BY rand(); 

quelque chose comme ça, mais j'oublié si le mot clé then est nécessaire dans if déclarations contenues dans les bases de données FirebirdSQL.

+0

Im en utilisant ExecuteNatieQuery sur le côté java qui prend des instructions SQL de base. Malheureusement, les instructions If-Else ne fonctionnent pas. Merci quand même. – Adrian