2015-09-16 2 views
1

В настоящее время у меня есть выбор, сделанный в SQL Server, и для этого должен быть тот же результат для MySQL, достижение кода, работающего в двух, будет еще лучше. Ниже сценария:Выбор в SQL Server не работает в MySQL, функция Stuff

select STUFF((SELECT ', ' + m_e.NAME + '=' + CAST(v.VALUE AS VARCHAR(MAX)) FROM MMP_USER_METADATA_INSTANCE i 
    left outer join MMP_USER_METADATA_INST_VALUE v on (i.id=v.USER_METADATA_INSTANCE_ID) 
    left outer join MMP_METADATA_ENTRY m_e on (v.METADATAENTRY_ID=m_e.id) 
    WHERE (u.id = i.USER_ID) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)') ,1,2,'') AS 'Campos Adicionais' from mmp_user u 

Tables: 
MMP_USER_METADATA_INSTANCE, 
MMP_USER_METADATA_INST_VALUE, 
MMP_METADATA_ENTRY, 
MMP_USER. 

Результат:

<table border="1"><tr BGCOLOR="#CCCCFF"><th>Campos Adicionais</th></tr> 
<tr><td>Skype=Testes, Centro de Custo=16, Endereço Bairro=Teste, Endereço Cidade=, Estado Civil=44, Filhos=38, Graduação Curso=, Graduação Faculdade=Teste, Nivel de Idioma Inglês=46, Nivel de Idioma Espanhol=46, Outro Idioma=Teste, Link Linkedin=, Link Facebook=Teste, Esporte=teste, Time de Futebol=teste</td></tr> 
</table> 
+2

'stuff' не является функцией MySQL: PI думаю, что вы можете использовать' group_concat' для эквивалентной функциональности. – Kritner

ответ

2

В MySQL, вы хотите что-то вроде этого:

select (SELECT group_concat(m_e.NAME, '=', value separator ',') 
     FROM MMP_USER_METADATA_INSTANCE i left outer join 
      MMP_USER_METADATA_INST_VALUE v 
      on i.id = v.USER_METADATA_INSTANCE_ID left outer join 
      MMP_METADATA_ENTRY m_e 
      on v.METADATAENTRY_ID = m_e.id 
     WHERE u.id = i.USER_ID 
     ) `Campos Adicionais` 
from mmp_user u;