MySQL的GROUP_CONCAT加入
我有3个表:MySQL的GROUP_CONCAT加入
作者
author_id last_name first_name organization
1 Smith John Org A
2 Smith Mary Org A
3 Doe John Org B
4 Doe Jane Org C
5 Jones John Org C
6 Sarduchi Guido Org A
author__papers
author_id paper_id is_conctact_author
1 1001 0
2 1001 0
3 1001 0
4 1002 0
5 1002 0
6 1001 1
org_info(这已经过滤的is_contact_author < 1)
paper_id organization idx org_count
1001 Org A 1 2
1001 Org B 2 2
1002 Org C 1 1
我需要的是一个结果集,看起来像这样基于上面的样本数据:
paper_id organization last_names idx org_count
1001 org A Smith, Smith 1 2
1001 org B Doe 2 2
1002 Org C Doe, Jones 1 1
我亲近有:
select AP.paper_id as paper_id, organization
GROUP_CONCAT(last_name SEPARATOR ', '), idx, org_count
from authors A
inner join authors__papers AP ON A.author_id = AP.author_id
inner join org_info O ON O.paper_id = AP.paper_id AND O.organization = A.organization
where AP.is_contact_author < 1
group by O.organization, AP.paper_id
order by paper_id;
...但最后名字被复制。如果我向GROUP_CONCAT添加一个DISTINCT,那么即使它是一个不同的人,我也会忽略姓氏相同的值(例如Smith)。
有关如何最好地采取此示例数据并获得所需输出而不出现问题的任何想法?
TIA!
假设我正确理解您的问题,一个选项是将您的查询移动到子查询中,将authorid
字段与distinct
相加,然后将group_concat
应用于外部查询。像这样的:
select paper_id, organization, GROUP_CONCAT(last_name SEPARATOR ', '),
idx, org_count
from (
select distinct AP.paper_id as paper_id, organization, a.last_name, a.author_id,
idx, org_count
from authors A
inner join authors__papers AP ON A.author_id = AP.author_id
inner join org_info O ON O.paper_id = AP.paper_id AND O.organization = A.organization
where AP.is_contact_author < 1
) t
group by organization, paper_id
order by paper_id;
这样你仍然可以返回2史密斯例如,但他们会有不同的作者ID。
我仍然得到重复,现在idx值也是倾斜的。 –
@DDurham - 在使用sql小提琴时遇到问题,或者会向您展示一个示例,但这对我有用......先从运行内部查询开始,查看它是否不会返回正确的结果(在group_concat之前)。如果是这样,这应该工作。如果没有,请进一步阐述。 – sgeddes
谢谢,现在玩它,并会让你知道。我也打算发表小提琴,但也遇到了问题。 –
一般GROUP BY规则说: 如果指定了GROUP BY子句,SELECT列表中的每个列引用必须标识一个分组列或者是一个set函数的参数。 – jarlh
选择 –
中ARE所在的组中的列是,但select中有列(idx,org_count),但不在group by中。 (在较新的MySQL版本中无效,在旧版本中出现不可预知的结果。) – jarlh