SQL Server. Получите родительскую строку и все его дочерние элементы в соотношении 1: n

В настоящее время я изучаю SQL, используя SQL Server. У меня есть две таблицы, которые являются tbAuthors и tbBooks , как в следующем 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

Можно ли получить запрос, если да, то каким образом?

Благодарим вас за внимание к этой проблеме.

0
Добро пожаловать в StackOverflow: если вы отправляете код, xml или образцы данных, пожалуйста выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ( {} ) на панель инструментов редактора для красивого формата и синтаксиса выделяет это! Кроме того, старайтесь избегать слишком частое использование кода # - он интерпретируется так, чтобы сделать строки заголовком (например,

и т. Д.) И вызывает действительно беспорядочное отображение ваших таблиц!

добавлено автор marc_s, источник

1 ответы

Вы действительно никогда не должны делать это через sql; это не то, что должен выполнить sql. Такой результат должен обрабатываться в клиентском коде на уровне презентации. Я предполагаю, что вы просто не понимаете, как правильно использовать набор результатов. Что вы планируете делать с набором результатов, чтобы вы не хотели, чтобы имя автора повторялось для каждой строки?

3
добавлено
Это похоже на вопрос, как использовать отвертку, чтобы забить гвоздь. Вероятно, мы могли бы выяснить какой-то конвективный способ его выполнения, но в нем отсутствует большая проблема, которая заключается в том, что вы не используете SQL правильно.
добавлено автор Dylan Smith, источник
Спасибо за ваш ответ, без сомнения, с кодом C#, который я могу, но я думал, что это можно сделать с помощью sql.
добавлено автор WizardDBA, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)