2016-08-25 69 views
4

我有一个表[映射] 2列类似下面MySQL的分割和结合​​的值

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

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

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

我的期望输出是

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

这可能吗?如果是这样,任何人都可以为我建立一个查询。

+0

你试过了什么SQL? – jedifans

+0

我还没有尝试过任何东西,因为我甚至不知道它是否可能,也不是因为我在帖子末尾提到的原因“是否有可能?@ jedifans” –

+1

您可以更改该方案吗?因为现在有了这个方案,你的数据一致性很差。 Table'mapping'应该有列:'map_id'和'value_id',然后你可以用一个map_id在数据库中保存多行。 –

回答

6

您可以使用MySQL FIND_IN_SET()加入表和GROUP_CONCAT()到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 

注:你应该知道,这是一个非常糟糕的DB结构。这可能会导致更复杂的查询,并会迫使您将事情复杂化。你应该Normalize你的数据,分割它,并将每个ID放在一个单独的记录!

+1

谢谢你的建议,我会记住这一点。但对于我的原始数据,我无法按照您的建议进行操作,而且我发布的内容与我的数据库架构完全不同。@ sagi –

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