仅显示一次重复的列值

时间:2016-05-08 07:46:21

标签: mysql sql vb.net ms-access

这里我只为我的课程图书管理项目工作。我目前有三个表

  

(书,作者,book_authors)

booksauthors之间存在多对多关系,book_author是一个中间表

这是我的book_author表。在这里你可以看到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

结果如下。这里的标题重复了两次,这是显而易见的。但我想重复一次标题,但也要重复两个作者名称。我能做到这一点吗?

enter image description here

2 个答案:

答案 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

此致 安德里