web-dev-qa-db-ja.com

2つのSQL選択クエリ(postgres内)をLIMITステートメントと組み合わせる

テーブルがあり、作成された最新の10レコードとIDがxのレコードを返すクエリが必要です。

私がやろうとしている-

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

しかし、LIMITの前にUNIONを配置できるようには見えません。別の列を追加して、並べ替えに使用してみました-

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;

でも私はあまり進歩していません。

30
Aidan Ewen

これが機能することを確認しました:

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

これにより、10日から20日までのレコードが得られ、開始できるはずです。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
sayannayas