Combinez deux requêtes SQL select (dans postgres) avec L'instruction LIMIT

J'ai une table et je veux une requête qui renvoie les 10 derniers enregistrements créés plus l'enregistrement dont l'id est X.

J'essaie de faire -

SELECT * FROM catalog_productimage
ORDER BY date_modified
LIMIT 10
UNION
SELECT * FROM catalog_productimage
WHERE id=5;

Mais il ne semble pas que je puisse mettre LIMIT là-dedans avant UNION. J'ai essayé d'ajouter une autre colonne et de l'utiliser pour le tri -

SELECT id, date_modified, IF(false, 1, 0) as priority FROM catalog_productimage
UNION
SELECT, id, date_modified, IF(true, 1, 0) as priority FROM catalog_productimage
WHERE id=5
ORDER BY priority, date_modified
LIMIT 10;

Mais je ne fais pas beaucoup de progrès..

22
demandé sur Aidan Ewen 2012-11-27 16:20:22

2 réponses

Juste vérifié que cela fonctionnera:

(SELECT * FROM catalog_productimage
ORDER BY date_modified
LIMIT 10)
UNION
SELECT * FROM catalog_productimage
WHERE id=5;
40
répondu sufleR 2012-11-27 12:28:39

Cela vous donnera des enregistrements de 10th à 20th et devrait vous aider à démarrer.je répondrai avec SQLfiddle

SELECT *  
  FROM (SELECT ROW_NUMBER () OVER (ORDER BY cat_id) cat_row_no, a.* FROM catalog_productimage a where x=5)  
 WHERE cat_row_no > 10 and cat_row_no <20  
1
répondu sayannayas 2012-11-27 12:26:40