SQL Server - 在关系1:n中获取父行及其所有子项

时间:2011-10-27 23:03:51

标签: sql sql-server

我目前正在使用SQL Server学习SQL。我有两个表,tbAuthorstbBooks,如下面的sql代码所示:

CREATE TABLE [dbo].[tbAuthors](
    [id_Author] [int] NOT NULL,
    [nameAuthor] [varchar](50) NOT NULL,
 CONSTRAINT [PK_tbAuthors] PRIMARY KEY CLUSTERED ([id_Author] ASC)
)

CREATE TABLE [dbo].[tbBooks](
    [idBooks] [int] NOT NULL,
    [bookName] [varchar](50) NOT NULL,
    [FKAuthor] [int] NOT NULL,
 CONSTRAINT [PK_tbBooks] PRIMARY KEY CLUSTERED ([idBooks] ASC)ON [PRIMARY]
)

我想要的只是获得作者的名字,并且他的所有书籍,如果没有作者的名字反复出现,通过以下查询,我得到这些数据:

select distinct ta.id_Author, ta.nameAuthor, tb.bookName 
from tbAuthors as ta 
inner join tbBooks as tb on tb.FKAuthor=ta.id_Author where tb.FKAuthor = 1 

,sql结果如下:

id_Author  nameAuthor   bookName
   1       Author1      Book1
   1       Author1      Book2
   1       Author1      Book3
   1       Author1      Book4 

我想知道的是如何获得下图中的查询?

id_Author   nameAuthor   bookName
   1        Author1      Book1
 empty      empty        Book2
 empty      empty        Book3
 empty      empty        Book4

是否可以通过查询,如果是这样的话?

感谢您关注此问题。

1 个答案:

答案 0 :(得分:3)

你真的不应该想通过sql这样做;这不是sql打算实现的目标。应该在演示级别的客户端代码中处理这种结果。我猜你只是不明白如何正确使用结果集。您打算如何处理您不希望每行重复使用authorname的结果集?