2012-11-27 10 views
21

Mam tabelę i chcę kwerendę, która zwraca 10 ostatnich rekordów i rekordu, który jest identyfikatorem x.Połączyć dwa kwerendy sql select (w postgres) z instrukcją LIMIT

Próbuję zrobić -

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

Ale to nie wygląda jak mogę umieścić LIMIT tam przed UNION. Próbowałem dodając innej kolumny i użyciu go do sortowania -

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; 

ale ja nie robię wielkich postępów ..

Odpowiedz

36

Tylko zaznaczone, że to będzie działać:

(SELECT * FROM catalog_productimage 
ORDER BY date_modified 
LIMIT 10) 
UNION 
SELECT * FROM catalog_productimage 
WHERE id=5; 
+0

byłam prawie tam! Dzięki! –

1

To daje rekordy od 10 do 20 i powinno Ci started.i będzie odpowiadać z powrotem 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