2016-08-25 63 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