2016-05-08 8 views
0

Здесь я работаю только над проектом управления библиотекой для моего course.I есть три таблицы в настоящее времяпоказать значение повторяется колонок только один раз

(книги, авторы, book_authors)

books и authors имеют много-много отношений между ними и book_author - это промежуточный стол

вот моя таблица book_author.Here вы можете увидеть книгу с id = 1, написанную двумя авторами. Что я готов сделать это, когда я прихожу к этой книге, я хочу, чтобы название книги повторялось только один раз.

enter image description here

Я использую следующий запрос для извлечения название книги и имя автора

SELECT DISTINCT books.title, authors.author_name FROM (books INNER JOIN book_author ON books.ID=book_author.book_id) INNER JOIN authors ON authors.ID=book_author.author_id WHERE books.ID=1 

результат заключается в следующем название .Здесь повторяется дважды, который obvious.But я хочу повторить название только один раз, но два имени автора, чтобы показать также. Как я могу это достичь?

enter image description here

+0

Как вы собираетесь отобразить эти данные для пользователей? – Steve

+0

Я хочу, чтобы заголовок показывался только один раз, но оба автора покажут. В противном случае пользователь может подумать, что это две разные книги от двух разных авторов, имеющих аналогичное имя. –

+0

Проблемы отображения данных лучше всего разрешать на уровне презентации, если это доступно, например. простой цикл в PHP (или, возможно, ASP или VB) – Strawberry

ответ

-1

Попробуйте использовать GROUP BY.

С уважением, Андрий

+0

здесь я не использую какую-либо агрегированную функцию. Как я могу использовать группу здесь –

+0

Добавляя 'MIN' или' GROUP_CONCAT' на 'author_name' – dnoeth

+0

Используйте комментарий, если вы просто хотите бросить подсказку. – Gustav

0

Вы должны использовать некоторые определенные пользователем функции (UDF). В Access VBA:

Public Function ConcatFields(TblName as String, FieldName as String, Optional Condition As String = "") As String 
    Dim rst as Dao.Recorset, StrSQL as String 
    StrSQL = "SELECT " & FieldName & " FROM " & TblName 
    IF Len(Condition) > 0 Then 
     StrSQL = StrSQL & " WHERE " & Condition 
    End if 
    Set rst = CurrentDb.OpenRecordset (StrSQL) 
    Do While Not rst.Eof 
     ConcatFields = ConcatFields & rst.Fields(FieldName) & ", " 
    rst.MoveNext: Loop 
    IF Right(ConcatFields, Len(", ") = ", ") Then 
     ConcatFields = Left(ConcatFields, Len(ConcatFields) - Len(", ")) 
    End If 
End Function 

это вы SQL:

SELECT books.title, ConcatFields('book_author INNER JOIN authors ON authors.ID=book_author.author_id', 'authors.author_name', 'book_author.book_id = ' & books.ID) 
FROM books