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]。
如何做到这一点?
为此使用子查询(如显示)或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
,其副作用是两列仅在结果中包含一次。