MySQL group concat used with 2 join table 查询结果重复
MySQL group concat used with 2 join table query results duplicate
我加入了 2 个表并使用 group concat 获取一些列的数据。以下是我的查询。这 returns 同一行两次
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 一起使用时。它不适用于以下
例如:
namedesg 数据
车辆数据
当前输出
但是在我的输出车辆数据中重复了 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
对于您想要的结果,您不能将 name
和 designation
以及 role
和 size
放在结果的单独列中。您需要在使用 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
我加入了 2 个表并使用 group concat 获取一些列的数据。以下是我的查询。这 returns 同一行两次
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 一起使用时。它不适用于以下
例如:
namedesg 数据
车辆数据
当前输出
但是在我的输出车辆数据中重复了 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
对于您想要的结果,您不能将 name
和 designation
以及 role
和 size
放在结果的单独列中。您需要在使用 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