【问题标题】:Return Authors by latest published book + Authors with no published books返回最新出版书籍的作者 + 没有出版书籍的作者
【发布时间】:2013-10-19 05:05:06
【问题描述】:

我有两张桌子:

•表 1:Books
•表2:Authors

我有以下查询:(此查询返回所有作者的书名和出版日期)

SELECT Authors.AuthorName, Books.BookTitle, Books.DatePublished, Books.Author
FROM Authors LEFT OUTER JOIN Books ON Authors.AuthorID = Books.Author

问题:!!

我想退回所有作者(包括已出版书籍的作者和未出版书籍的作者。

条件(有书的作者。只返回最新出版的书)

我可以通过以下查询获得最新出版的书籍:

SELECT a.*    
FROM [Books] a left outer join Books b on a.Author = b.author and 
a.DatePublished < b.DatePublished where b.ISDN  is null

问题:如何合并这两个查询以返回所有 作者 + 有最新出版书籍的作者?

【问题讨论】:

  • 请添加一些示例数据和预期输出以轻松理解您的问题。提及数据库,如 MS Sql server、Oracle、MySql 等。

标签: sql


【解决方案1】:

请尝试:

SELECT DISTINCT
    AuthorName, 
    BookTitle, 
    DatePublished, 
    Author 
FROM(
    SELECT 
        Authors.AuthorName, 
        Books.BookTitle, 
        Books.DatePublished, 
        Books.Author, 
        ROW_NUMBER() over (partition by Authors.AuthorID order by DatePublished desc) Rnum
    FROM Authors LEFT OUTER JOIN Books ON Authors.AuthorID = Books.Author
)x WHERE Rnum=1

【讨论】:

  • 我使用了这个查询,但是它返回重复项
  • 请通过在外部选择中添加一个 distinct 来检查,我已经更新了结果。
  • 不同的仍然返回重复项
  • 重复哪一列?
  • AuthorID AuthorName ISDN BookTitle 1 Bob 899 BobMansion 1 Bob 899 BobMAnsion
猜你喜欢
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 2011-12-10
  • 2011-12-24
相关资源
最近更新 更多