如何在MySQL中使用group_concat返回单行以及多个条目

时间:2016-04-20 12:07:29

标签: mysql

我希望这个是一个相对容易解决的问题,但这是我面临的问题:

SQL查询:

SELECT
    job.job_id
    ,job_reference
    ,job_title
    ,jc.name as job_category_name
    ,ps.name as position_status_name
    ,group_concat(pt.name ORDER BY pt.position_type_id SEPARATOR ' / ') as position_type_name
    ,cty.name as city_name
    ,min.amount as min_salary
    ,max.amount as max_salary
    ,job_description
    ,skills_required
    ,additional_notes
FROM job
INNER JOIN job_category jc ON job.job_category_id = jc.job_category_id
INNER JOIN position_status ps ON job.position_status_id = ps.position_status_id
INNER JOIN job_position_type jpt ON job.job_id = jpt.job_id
INNER JOIN position_type pt ON jpt.position_type_id = pt.position_type_id
INNER JOIN city cty ON job.city_id = cty.city_id
INNER JOIN salary min ON job.min_salary_id = min.salary_id
INNER JOIN salary max ON job.max_salary_id = max.salary_id;

查询仅返回job_position_type表具有多个条目的条目,而不是job_position_type只有一个条目。

干杯,

1 个答案:

答案 0 :(得分:0)

好的,所以我设法很容易地解决我的问题,这里是我上面指定的原始SQL:

SELECT
    job.job_id
    ,job_reference
    ,job_title
    ,jc.name as job_category_name
    ,ps.name as position_status_name
    ,group_concat(pt.name ORDER BY pt.position_type_id SEPARATOR ' / ') as position_type_name
    ,cty.name as city_name
    ,min.amount as min_salary
    ,max.amount as max_salary
    ,job_description
    ,skills_required
    ,additional_notes
FROM job
INNER JOIN job_category jc ON job.job_category_id = jc.job_category_id
INNER JOIN position_status ps ON job.position_status_id = ps.position_status_id
INNER JOIN job_position_type jpt ON job.job_id = jpt.job_id
INNER JOIN position_type pt ON jpt.position_type_id = pt.position_type_id
INNER JOIN city cty ON job.city_id = cty.city_id
INNER JOIN salary min ON job.min_salary_id = min.salary_id
INNER JOIN salary max ON job.max_salary_id = max.salary_id;

这就是查询返回的内容:

Position type name displaying all concatenated rows

解决方案只是添加一个group by子句,以便它分隔行,这里是我的更新SQL:

SELECT
    job.job_id
    ,job_reference
    ,job_title
    ,jc.name as job_category_name
    ,ps.name as position_status_name
    ,group_concat(pt.name ORDER BY pt.position_type_id SEPARATOR ' / ') as position_type_name
    ,cty.name as city_name
    ,min.amount as min_salary
    ,max.amount as max_salary
    ,job_description
    ,skills_required
    ,additional_notes
FROM job
INNER JOIN job_category jc ON job.job_category_id = jc.job_category_id
INNER JOIN position_status ps ON job.position_status_id = ps.position_status_id
INNER JOIN job_position_type jpt ON job.job_id = jpt.job_id
INNER JOIN position_type pt ON jpt.position_type_id = pt.position_type_id
INNER JOIN city cty ON job.city_id = cty.city_id
INNER JOIN salary min ON job.min_salary_id = min.salary_id
INNER JOIN salary max ON job.max_salary_id = max.salary_id
GROUP BY pt.position_type_id;

这是我想要的预期结果:

Position type id grouped by position type id

再次感谢@Adrien Brunelat看了我的问题。