我正在尝试创建一个查询,该查询返回每个父级中排名最高的子项的子ID,子标题,父ID和父标题。
所以,例如,假设我有一系列名为“小说”的书籍,然后是一个名为“英语小说”的子集,然后是20世纪英语小说的一部分。
我想写一个查询,向我展示20世纪英语小说的最后一个条目(让我们说这是10个标题中的第10个标题),它的标题,id,父母id和父母标题(英语)语言小说)。
我遇到的问题是,当我使用max(rank)时,我得到了正确的父标题和父ID,但我没有得到正确的子ID或标题。
这是我的代码:
select
c.child_book_title_id as 'child ID',
btn2.text 'Child Title',
max(c.rank) as 'Last Episode/Season Number',
c.parent_book_title_id as 'parent ID',
btn.text 'Parent Title'
from
container_associations c
inner join
book_titles bt on bt.id = c.child_book_title_id
left join
book_title_names btn on btn.book_title_id = parent_book_title_id
left join
book_title_names btn2 on btn2.book_title_id = child_book_title_id
group by
c.parent_book_title_id
order by
c.parent_book_title_id asc
如果您有任何可以提供帮助的建议,请与我们联系。
由于
答案 0 :(得分:1)
您似乎依赖GROUP BY
和MAX( )
来过滤结果。最好包含一个WHERE
子句,以确保获得所需的内容。
试试这段代码:
select
c.child_book_title_id as 'child ID',
btn2.text 'Child Title',
c.rank as 'Last Episode/Season Number',
c.parent_book_title_id as 'parent ID',
btn.text 'Parent Title'
from
container_associations c
inner join
book_titles bt on bt.id = c.child_book_title_id
left join
book_title_names btn on btn.book_title_id = parent_book_title_id
left join
book_title_names btn2 on btn2.book_title_id = child_book_title_id
where rank = (
select max(rank)
from container_associations c2
where parent_book_title_id = c.parent_book_title_id)
order by
c.parent_book_title_id asc