【问题标题】:MySQL query to convert multiple rows into one rowMySQL查询将多行转换为一行
【发布时间】:2020-05-21 00:25:09
【问题描述】:

表 1 表 2 我用来从我的数据库中获取第一个表的查询:

use mydb;
select doc_id,first_name,title,overall_experience_years,address,description_,Price,degree_name from doctor_profile d inner join doctor_education e on d.doc_id=e.doctor_id inner join doc_degree_master m1 on m1.id=e.doc_degree_master_id inner join doctor_specialization s on d.doc_id=s.doctor_id inner join doc_specialization_master m2 on m2.id=s.doc_Specialization_master_id inner join doctor_pricing p on p.doctor_id=d.doc_id;

我想以表 2 的形式获取数据。我应该写什么查询?

这是我在springboot中的模型类:

@Id
private Long Id;
private String Name;
private String Title;
private int OverallExperience;
private BigDecimal Price;
private String Address;
private List<String> Specialities;
private List<String> Degrees;

【问题讨论】:

  • @ScaryWombat 我相信您缺少将description_degree_name 值合并到逗号分隔列表中的逻辑请求,对于所有其他列都相同的行。但你是对的,逻辑可以在 Java 代码中完成,而不是像 my answer 那样在查询中完成。
  • 考虑处理应用代码中数据显示的问题

标签: java mysql database spring spring-boot


【解决方案1】:

见聚合函数GROUP_CONCAT(expr)

select doc_id
     , first_name
     , title
     , overall_experience_years
     , address
     , group_concat(distinct description_) as description_
     , Price
     , group_concat(distinct degree_name) as degree_name
  from doctor_profile d
  join doctor_education e on d.doc_id = e.doctor_id
  join doc_degree_master m1 on m1.id = e.doc_degree_master_id
  join doctor_specialization s on d.doc_id = s.doctor_id
  join doc_specialization_master m2 on m2.id = s.doc_Specialization_master_id
  join doctor_pricing p on p.doctor_id = d.doc_id
 group by doc_id
        , first_name
        , title
        , overall_experience_years
        , address
        , Price

【讨论】:

    【解决方案2】:

    当你想合并超过 1 个值时,你可以使用 group_concat() 函数。但是当你想合并 uniq 值时,你必须使用 distinct 。

    group_concat(distinct tab_name) 并按除(description_ 和 degree_name)以外的其他 tab_name 使用 group

    select doc_id, first_name, title, overall_experience_years, address
    , group_concat(distinct description_) as description_ , Price
    , group_concat(distinct degree_name) as degree_name
          from doctor_profile d
          join doctor_education e on d.doc_id = e.doctor_id
          join doc_degree_master m1 on m1.id = e.doc_degree_master_id
          join doctor_specialization s on d.doc_id = s.doctor_id
          join doc_specialization_master m2 on m2.id = s.doc_Specialization_master_id
          join doctor_pricing p on p.doctor_id = d.doc_id
         group by doc_id, first_name, title, overall_experience_years, address, Price
    

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 2018-11-01
      相关资源
      最近更新 更多