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

标签 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 仅具有单个条目,则不会返回。

干杯,

蒂姆

最佳答案

好吧,实际上我很容易解决了我的问题,这是我上面指定的原始 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 查看我的问题。

关于mysql - 如何在 MySQL 中使用 group_concat 返回单行以及多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36743298/

相关文章:

PHP 和 MySql 转储文件中的非法排序规则混合

php - 表中的最大 ID(整数)

html - 使用 php 和 mysql 使用 utf-8 编码将希伯来语存储在数据库中

mysql - 可以在同一个 SQL 查询中使用两个 GROUP_CONCAT 吗?

php更改数据库日期值

php - 我的 laravel 查询仅返回数据库中的最后一条记录

php - 使用准备好的 PDO 语句

mysql - sqlyog 将查询结果导出为 csv

mysql - xampp mysql 无法初始化多主结构

MySQL SET 字段,其中 A 列 + B 列与搜索匹配