【问题标题】:MySQL group concat used with 2 join table query results duplicateMySQL 组 concat 与 2 个连接表查询结果重复使用
【发布时间】:2017-04-19 17:07:38
【问题描述】:

我已加入 2 个表并使用组 concat 来获取某些列的数据。以下是我的查询。这将返回同一行两次

SELECT GROUP_CONCAT(  vehicles.role ORDER BY vehicles.id ASC SEPARATOR '\n') as role,GROUP_CONCAT(  vehicles.size ORDER BY vehicles.id ASC SEPARATOR '\n') as size,festivals.id,festivals.ref_no as ref_no, festivals.camping,festivals.tour_mgr_name,festivals.email,festivals.mobile,festivals.name_address, GROUP_CONCAT( namedesgs.name  ORDER BY namedesgs.id ASC SEPARATOR '\n') as names,GROUP_CONCAT( namedesgs.designation  ORDER BY namedesgs.id ASC SEPARATOR '\n') as designations
FROM festivals
    LEFT JOIN namedesgs  ON festivals.id = namedesgs.festival
    LEFT JOIN vehicles  ON festivals.id = vehicles.festival 
Group BY festivals.id

请建议如何获取不重复的数据?

当我将 DISTINCT 与 concat 一起使用时。它不适用于以下

例如:

命名数据

车辆数据

电流输出

但在我的输出车辆上,即使存在一个数据,数据也有 3 次重复。

这是我尝试过的查询

SELECT t.id, GROUP_CONCAT(a.name SEPARATOR '\n') as name,
 GROUP_CONCAT(a.designation SEPARATOR '\n') as desg ,GROUP_CONCAT(b.role SEPARATOR '\n') as role,
 GROUP_CONCAT(b.size SEPARATOR '\n') as size
FROM festivals t
 LEFT JOIN namedesgs a ON a.festival=t.id 
 LEFT JOIN vehicles b ON b.festival=t.id  
where t.id=4
GROUP BY t.id


festivals

id ref_no
1   AAA
2   BBB
3   CCC

namedesgs  

id name designation festival(festival table id)
1  ann   SE              1
2  ben   AE              1
3  Jan   cook            1
4  alun  cook            1
5  hej    hik            2
6  nij    AE             1

vehicles

id role size   festival(festival table id)
1  r1   14              1
2  r1   12              1
3  r2   12              1
4  r3  12              1
5  r4    12            2

我想要的输出是

festivalid name designations role  size
1           ann    SE          r1  14
            ben    AE          r1  12
           jan    cook         r2  12
           alun    cook        r3  12
           aij    AE          
2          hej    hik         r4   12

【问题讨论】:

  • GROUP_CONCAT 中使用DISTINCT 删除重复项。
  • @Barmar :我也使用它 GROUP_CONCAT( DISTINCT vehicle.size ORDER BY vehicle.id ASC SEPARATOR '\n' 但是当数据重复时,它也会删除它。请参阅我的表格的附件图像. 当我使用 DISTINCT 时,即使表中有两个,它也只会在“desg6”上返回。请建议
  • @Barmar:请检查我的问题的更新部分。
  • 你能展示样本数据和想要的结果吗?
  • @Barmar 请检查我添加信息的问题。请帮助

标签: php mysql group-concat


【解决方案1】:

对于您想要的,您不能将namedesignationrolesize 放在结果的不同列中。在使用GROUP_CONCAT 之前,您需要将它们连接起来。并使用DISTINCT 删除重复项。

SELECT t.id AS festivalid, 
        GROUP_CONCAT(DISTINCT CONCAT(a.name, ' ', a.designation) SEPARATOR '\n') AS `name designations`,
        GROUP_CONCAT(DISTINCT CONCAT(b.role, ' ', b.size) SEPARATOR '\n') AS `role size`
FROM festivals AS t
LEFT JOIN namedesgs a ON a.festival=t.id 
LEFT JOIN vehicles b ON b.festival=t.id
GROUP BY t.id

【讨论】:

  • 仍在复制 .与我的“当前输出”图像相同
  • 见我上面的问题。我不明白您如何将 namedesgsvehicles 表中的行关联到同一行结果中。
猜你喜欢
  • 2012-10-29
  • 2019-04-18
  • 2011-08-18
  • 2017-07-25
  • 2019-03-21
  • 2021-08-30
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多