这是我的两张桌子:
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
表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
正如您所看到的,对于 table1 中的每一个,qid and gid
table2中都可以有任意数量的行。
我的要求:
我想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 ?
但是这个查询将从内部连接的偏移量中检索 10 行,但我希望表 2 中的所有行都来自 table1 的 10 行 [offset]。
如何做到这一点?
为此目的使用子查询(如图所示)或CTE :
USING (qid, gid)
只是一个快捷方式,ON q.qid = a.qid AND q.gid = a.gid
其副作用是两列仅包含在结果中一次。