我有一个查询我在2个表上运行。子表对应于父表。
换句话说,父表中有6个条目。
对于这6个条目中的每个条目,都有一个返回1000条记录的外键。
我需要为6个条目中的每个条目返回前25条记录。
我可以返回前150条记录,但不能返回其ID。
select * from table where rownum <150
但这显然不会返回EACH的前25个条目。
任何帮助将不胜感激。感谢。
答案 0 :(得分:3)
假设一个支持窗口函数的RDBMS:
SELECT q.parent_column_a, q.child_column_b
FROM (SELECT p.column_a AS parent_column_a, c.column_b AS child_column_b,
ROW_NUMBER() OVER(PARTITION BY p.primarykey ORDER BY c.primarykey) AS RowNum
FROM parent p
INNER JOIN child c
ON p.primarykey = c.foreignkey) q
WHERE q.RowNum <= 25
答案 1 :(得分:1)
如果您使用的是SQL Server或Oracle,这就是解决方案。
select * from
(
select p.parent_id, c.child_id,
row_number() over (partition by c.parent_id order by c.child_id) rn
from parent p inner join child c on p.parent_id = c.parent_id
) subsel
where rn <= 25
答案 2 :(得分:0)
SELECT TOP 25 SubEntries.SubEntryID
FROM Entries Entries
INNER JOIN SubEntries SubEntries
ON Entries.EntryID = SubEntries.EntryID
答案 3 :(得分:0)
这适用于我的数据
<强>解释强>
基本上,您使用WHERE子句仅选择子表id位于子表中与其父表对应的所有行的前25行中的那些行。
<强>查询强>
SELECT * -- Column List
FROM ParentTable
INNER JOIN SubTable
WHERE SubTable.ID IN
(SELECT TOP 25 SubTable.ID
FROM SubTable s2
WHERE s2.ParentTableID = SubTable.ParentTableID)
这几乎适用于任何sql数据库。