这里我只为我的课程图书管理项目工作。我目前有三个表
(书,作者,book_authors)
books
和authors
之间存在多对多关系,book_author
是一个中间表
这是我的book_author表。在这里你可以看到id = 1的书是由两位作者写的。我愿意做的是每当我拿到那本书时我都希望书名只重复一次。
我使用以下查询来获取书名和作者姓名
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
结果如下。这里的标题重复了两次,这是显而易见的。但我想重复一次标题,但也要重复两个作者名称。我能做到这一点吗?
答案 0 :(得分: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
答案 1 :(得分:-1)
尝试使用GROUP BY。
此致 安德里