首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CONCAT、GROUP_CONCAT和DISTINCT的GROUP_CONCAT查询组合

CONCAT、GROUP_CONCAT和DISTINCT的GROUP_CONCAT查询组合
EN

Stack Overflow用户
提问于 2016-08-15 03:31:06
回答 1查看 120关注 0票数 0

我有这三张桌子和他们的亲戚。

代码语言:javascript
复制
people
    people_id          (int)
    people_name        (varchar)

comic
    comic_id           (int)
    comic_name         (varchar)

ref_author
    comic_id           (int)
    people_writer_id   (int)
    people_illust_id   (int)

ref_author上的关系如下。

  • comic_id指的是漫画的comic_id
  • people_writer_id和people_illust_id都是指“人物”( people's people_id ),因为people_id上的任何特定人都可能是作家、插画家,或者两者兼而有之。
  • 当有两位作家和一位插画家时,我会用第一位作者和插画家,然后是第二位作家和第一位插画家(用重复填补空白)插入表格。

使用这个查询,

代码语言:javascript
复制
SELECT distinct SQL_CALC_FOUND_ROWS 
    c.comic_name, concat (group_CONCAT(distinct pa.people_name separator ' / '), ', ', group_CONCAT(distinct pb.people_name separator ' / ')) as 'author' 
FROM ref_author ra 
inner join comic c on c.comic_id = ra.comic_id 
inner join people pa on pa.people_id = ra.people_writer_id 
inner join people pb on pb.people_id = ra.people_illust_id 
group by c.comic_name

我可以展示这种结果。

代码语言:javascript
复制
comic_name         author
17+                Kharisma Jati, Kharisma Jati
1SR6               Muhammad Fathanatul Haq, Muhammad Fathanatul Haq
304th Study Room   Felicia Huang, Felicia Huang
4HERO              Arief Prasojo, Arief Prasojo
5 cm               Donny Dhirgantoro, Is Yuniarto
....
Degalings          Pandji Pragiwaksono, Pandji Pragiwaksono / Shani ...

这个查询的问题是,当一个人只引用一个位置时,author列会很好地显示,而当一个人引用两个位置时,它将显示为副本。我的目的是在没有重复的情况下显示数据。

代码语言:javascript
复制
comic_name         author
17+                Kharisma Jati 
1SR6               Muhammad Fathanatul Haq 
304th Study Room   Felicia Huang 
4HERO              Arief Prasojo 
5 cm               Donny Dhirgantoro, Is Yuniarto
....
Degalings          Pandji Pragiwaksono, Shani ...

我该怎么做?我在哪里修改查询,还是表中有任何缺陷?

EN

回答 1

Stack Overflow用户

发布于 2016-08-15 03:46:45

从您的数据中可以看到,您从两个不同的地方( ra.people_writer_idra.people_illust_id )获取了作者值。因为在您的输出中,这些名称是用逗号分隔的,这意味着名称出现在两个字段中,因此Kharisma就是一个作家和一个插画家。

如果是这样的话,并且您不希望当它们同时充当作者和插画家时,名称出现两次,那么您需要更改查询的以下内容:

代码语言:javascript
复制
concat (group_CONCAT(distinct pa.people_name separator ' / '), ', ', group_CONCAT(distinct pb.people_name separator ' / ')) as 'author'

并在这两个字段之间使用不同的方法,您的输出就不会像现在这样。例如,你可以

代码语言:javascript
复制
group_CONCAT(distinct pa.people_name,pb.people_name separator ' , ') as 'author'

这将避免重复名称。但是,这将只列出由逗号分隔的这两个值的组合之间的唯一名称,您将不会看到作者和插画家之间的分离。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38948941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档