web-dev-qa-db-ja.com

LIMITとOFFSETを使用して内部結合からデータを取得する

これらは私の2つのテーブルです。
table1

qid[PK]     |gid[PK]  |abcd     | xyz  |    date
---------------+---------+---------+------+------------
 00001      |     qwe |      54 |    a | 1994-11-29
 00002      |     asd |       0 |    s | 1994-11-29
 00003      |     azx |      50 | 0.25 | 1994-11-27

table2

qid[PK]     | gid[PK] | user[PK]
------------+---------+--------
 00001      |     qwe | shreya
 00001      |     qwe | nagma
 00001      |     qwe | koena
 00001      |     qwe | paoli
 00002      |     asd | anushka
 00002      |     asd | angelina
 00003      |     azx | jolie
 00003      |     azx | scarlett
 00003      |     azx | sharon
 00003      |     azx | jeniffer

あなたが見ることができるようにqid and gid of table1table2には任意の数の行を含めることができます。

私の要件:
最初の10個の値のすべてのユーザーを取得したいqid and gidオフセットから。

My Query:

    select  * from table1 q inner join table2 a on q.qid=a.qid
 and q.gid=a.gid  order by q.date desc limit 10 offset ?

しかし、このクエリは内部結合のオフセットから10行を取得しますが、table1の10行[offset]に対して、table 2のすべての行が必要です。

どうすればこれを達成できますか?

2
Ashwin

そのためには、サブクエリ(表示されているとおり)または [〜#〜] cte [〜#〜] を使用します。

_SELECT *
FROM  (
   SELECT qid, gid
   FROM   table1
   ORDER  BY date DESC
   LIMIT  10
   OFFSET ?
   ) q
JOIN   table2 a USING (qid, gid)
_

USING (qid, gid) は、2つの列のみが含まれるという副作用のある_ON q.qid = a.qid AND q.gid = a.gid_の単なるショートカットですonce結果で。

4