MySQL拆分并加入值

时间:2016-08-25 07:41:15

标签: mysql

我有一个表[mapping],有两列类似于下面的

id  | values
1   | 1,2
2   | 1,2,3
3   | 1,1
4   | 1,1,2

和另一个表[map]类似于此

sno | values
1   | Test
2   | Hello
3   | Hai

我的预期输出是

id  | values
1   | Test,Hello
2   | Test,Hello,Hai
3   | Test,Test
4   | Test,Test,Hello

有可能吗?如果是,请任何人为我建立一个查询。

2 个答案:

答案 0 :(得分:8)

您可以使用MySQL FIND_IN_SET()加入表格,GROUP_CONCAT()来连接值:

SELECT s.sno,GROUP_CONCAT(s.values) as `values` 
FROM mapping t
INNER JOIN map s ON(FIND_IN_SET(s.id,t.values))
GROUP BY s.sno

注意:您应该知道这是一个非常糟糕的数据库结构。这可能会导致更复杂的查询,并会迫使您过度复杂化。您应该Normalize数据,将其拆分,并将每个ID放在单独的记录中!

答案 1 :(得分:2)

SELECT
    `ids`.`id`,
    GROUP_CONCAT(`values`.`texts`) AS texts
FROM
    `ids`
INNER JOIN `values` ON FIND_IN_SET(`values`.`id`, `ids`.`values`)
GROUP BY
    `ids`.`id`

它的工作方式如下:Example