SQL查询未输出正确的信息

时间:2014-08-11 23:34:33

标签: sql

我正在尝试创建一个查询,该查询返回每个父级中排名最高的子项的子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

如果您有任何可以提供帮助的建议,请与我们联系。

由于

1 个答案:

答案 0 :(得分:1)

您似乎依赖GROUP BYMAX( )来过滤结果。最好包含一个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

我试了一下:http://sqlfiddle.com/#!2/d485f/1