我有这三张桌子和他们的亲戚。
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上的关系如下。
使用这个查询,
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我可以展示这种结果。
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列会很好地显示,而当一个人引用两个位置时,它将显示为副本。我的目的是在没有重复的情况下显示数据。
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 ...我该怎么做?我在哪里修改查询,还是表中有任何缺陷?
发布于 2016-08-15 03:46:45
从您的数据中可以看到,您从两个不同的地方( ra.people_writer_id和ra.people_illust_id )获取了作者值。因为在您的输出中,这些名称是用逗号分隔的,这意味着名称出现在两个字段中,因此Kharisma就是一个作家和一个插画家。
如果是这样的话,并且您不希望当它们同时充当作者和插画家时,名称出现两次,那么您需要更改查询的以下内容:
concat (group_CONCAT(distinct pa.people_name separator ' / '), ', ', group_CONCAT(distinct pb.people_name separator ' / ')) as 'author'并在这两个字段之间使用不同的方法,您的输出就不会像现在这样。例如,你可以
group_CONCAT(distinct pa.people_name,pb.people_name separator ' , ') as 'author'这将避免重复名称。但是,这将只列出由逗号分隔的这两个值的组合之间的唯一名称,您将不会看到作者和插画家之间的分离。
https://stackoverflow.com/questions/38948941
复制相似问题