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

Можете ли вы изменить схему? Потому что прямо сейчас с этой схемой у вас действительно плохая согласованность данных. Таблица '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 

Примечание: Вы должны знать, что это очень плохая структура БД. Это может привести к гораздо более сложным запросам и заставит вас усложнить ситуацию. Вы должны указать 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

Смежные вопросы