2017-04-13 2 views
0

Je dois écrire un prefetcher SQL le long des lignes demot-clé SQL LIMITE: Assurer un résultat spécifique est inclus

SELECT * WHERE id == x OR id >= y LIMIT 100 FROM ... 

où je dois l'identifiant de résultat == x à inclure, tandis que les autres résultats ne sont que prime. Est-ce possible? Si ce n'est pas le cas, je pense que si les identifiants sont triés, et les résultats retournés sont dans leur ordre, je peux toujours faire la requête d'une manière où il est garanti d'inclure id == x. Mais pourrait être difficile.

Edit: La réponse (de GAR) est la suivante:

(SELECT * WHERE id == x) 
UNION 
(SELECT * WHERE id > y LIMIT 100) 

Note: Il est correct que je peux avoir + -1 nombre de résultats

+1

Vous avez besoin de deux sélections et d'une union. Votre 'id == x OU id> = y' ne garantirait pas que' id == x' serait sélectionné. – rbm

+0

Il est possible mais vous avez construit le SQL tout foutu. Il va '' SELECT * FROM ... WHERE ... LIMIT ... '' ''. En outre, étiqueter votre base de données s'il vous plaît. – Anand

+0

@Anand, non, cela ne garantit pas que 'id == x' est inclus. – rbm

Répondre

2

Si vous avez besoin id = x à inclure , faire quelque chose comme ceci:

select case when id = x then 1 else 2 end sortOrder 
etc 
order by sortOrder 
+0

Je vois le point sur la limite de couper des rangs donc vous pouvez l'utiliser pour vous assurer qu'il n'est pas couper. – Anand

1

Après avoir mis à la syntaxe SQL, il ressemblerait à ceci:

SELECT * 
FROM ... 
WHERE id = x OR id >= y 
ORDER BY CASE WHEN id = x THEN 0 ELSE 1 END ASC 
LIMIT 100 

EDIT: Rappel: la limite est appliquée après la commande.