これらは私の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のすべての行が必要です。
どうすればこれを達成できますか?
そのためには、サブクエリ(表示されているとおり)または [〜#〜] 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結果で。