使用 LIMIT 和 OFFSET 从内连接中检索数据

Ash*_*win 3 postgresql join jdbc

这是我的两张表:
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
Run Code Online (Sandbox Code Playgroud)

表2

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
Run Code Online (Sandbox Code Playgroud)

正如你可以看到每个qid and gid表1可以有任意数量的行表2

我的要求:
我想qid and gid从偏移量中检索前 10 个值的所有用户。

我的查询:

    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 ?
Run Code Online (Sandbox Code Playgroud)

但是此查询将从内部联接的偏移量中检索 10 行,但我希望表 2 中的所有行都来自 table1 的 10 行 [offset]。

如何做到这一点?

Erw*_*ter 5

为此使用子查询(如显示)或CTE

SELECT *
FROM  (
   SELECT qid, gid
   FROM   table1
   ORDER  BY date DESC
   LIMIT  10
   OFFSET ?
   ) q
JOIN   table2 a USING (qid, gid)
Run Code Online (Sandbox Code Playgroud)

USING (qid, gid)只是一种快捷方式ON q.qid = a.qid AND q.gid = a.gid,其副作用是两列仅在结果中包含一次