Mysql col查询结果中存在重复字段

Mysql col查询结果中存在重复字段,mysql,sql,Mysql,Sql,我有3张桌子,上面有书、作者和流派 我希望得到的输出结果是:book、author和genres,但当我进行此查询时,我有重复的字段,如果图书在示例中有5种类型(查询结果的第一行),author行也会重复5或相反 以下是关于SQL FIDLE的示例: 我需要在第一排: 书|一作者|五种体裁 ... 等等。你应该重新考虑你的模式。我想分享一些想法: (我知道这并不能回答您的问题,但请相信我:从一开始就使用良好的模式可以节省您以后的大量工作) 在books表中,使用author.id作为外键。否则

我有3张桌子,上面有书、作者和流派

我希望得到的输出结果是:book、author和genres,但当我进行此查询时,我有重复的字段,如果图书在示例中有5种类型(查询结果的第一行),author行也会重复5或相反

以下是关于SQL FIDLE的示例:

我需要在第一排:

书|一作者|五种体裁 ...
等等。

你应该重新考虑你的模式。我想分享一些想法: (我知道这并不能回答您的问题,但请相信我:从一开始就使用良好的模式可以节省您以后的大量工作)

  • 在books表中,使用
    author.id
    作为外键。否则,一旦您得到重复的名称(这是可能的),您就会遇到麻烦。加入这些表格也将变得更加容易

  • 你很可能有一套特定的体裁,并将它们分配给你的书。这是一种n:m关系。这意味着一本书可以有多种体裁,一种体裁可以分配给多本书。您需要一个关系表来执行此操作。然后,关系表将包含一本书的ID和一个流派的ID,并将它们链接起来


  • 若要获得所需内容,请将DISTINCT添加到第4行,这样就不会有任何重复项。但是,您仍然可以返回多个author(unique),但这就是您的查询应该返回的方式

    比如:

    group_concat(DISTINCT concat_ws (' ',`a`.`last_name`,`a`.`first_name`,`a`.`middle_name`)) as author,
    

    MySQL DISTINCT运算符使用SELECT语句消除结果集中的重复行