0

我使用以下代码创建了一个视图:

CREATE OR REPLACE VIEW aaa AS

   SELECT pry.uid, 
          treg.nombre_es as region, 
          tpais.nombre_es as pais, 
          tdep.departamento, 
          dep_other, tciu.ciudad, 
          ciu_other
     FROM tx_oriproyectos_proyectos AS pry
LEFT JOIN tx_oritablascomunes_regiones as treg ON pry.region = treg.uid
LEFT JOIN tx_oritablascomunes_paises as tpais ON pry.pais = tpais.uid
LEFT JOIN tx_oritablascomunes_departamentos as tdep ON pry.departamento = tdep.uid
LEFT JOIN tx_oritablascomunes_ciudades as tciu ON pry.ciudad = tciu.uid

我得到了这个并且没问题:

结果 http://finewebdesigns.com/images/mysql_view_result.jpg

现在我需要获得这样的连接结果:

concatenated_field
---------------------------------------
Africa - ALbania - Tirana1 - Tirana2
Africa - Colombia - Guaviare - Calamar

我怎样才能做到这一点?


我试过这个:

CREATE OR REPLACE VIEW aaa AS

SELECT CONCAT_WS (' - ', pry.uid, treg.nombre_es as region, tpais.nombre_es as pais, tdep.departamento, dep_other, tciu.ciudad, ciu_other)
FROM tx_oriproyectos_proyectos AS pry
LEFT JOIN tx_oritablascomunes_regiones as treg
ON pry.region=treg.uid
LEFT JOIN tx_oritablascomunes_paises as tpais
ON pry.pais=tpais.uid
LEFT JOIN tx_oritablascomunes_departamentos as tdep
ON pry.departamento=tdep.uid
LEFT JOIN tx_oritablascomunes_ciudades as tciu
ON pry.ciudad=tciu.uid

但我得到:

#1583 - Incorrect parameters in the call to native function 'CONCAT_WS'

好的,感谢@Mat,我终于得到了这个代码,这是这个问题的预期解决方案。

CREATE OR REPLACE VIEW aaa AS

SELECT pry.uid, CONCAT_WS (' - ', treg.nombre_es, tpais.nombre_es, tdep.departamento, NULLIF(dep_other,''), tciu.ciudad, NULLIF(ciu_other,''))
FROM tx_oriproyectos_proyectos AS pry
LEFT JOIN tx_oritablascomunes_regiones as treg
ON pry.region=treg.uid
LEFT JOIN tx_oritablascomunes_paises as tpais
ON pry.pais=tpais.uid
LEFT JOIN tx_oritablascomunes_departamentos as tdep
ON pry.departamento=tdep.uid
LEFT JOIN tx_oritablascomunes_ciudades as tciu
ON pry.ciudad=tciu.uid

得到这个: http: //finewebdesigns.com/images/mysql_view_result_solved.jpg

4

1 回答 1

3

您应该能够使用CONCAT_WS字符串函数。

SELECT CONCAT_WS(' - ', treg.nombre_es, tpais.nombre_es, ...) FROM ...

从文档:

CONCAT_WS() 不会跳过空字符串。但是,它会跳过分隔符参数之后的任何 NULL 值。

所以你的空值将被忽略。

如果您还想跳过空字符串,可以使用 throwNULLIF混合函数,如ypercube建议的那样:

SELECT CONCAT_WS(' - ', NULLIF(col,''), ...) ...
于 2011-10-09T14:44:13.580 回答