0

このコードを使用して VIEW を作成しました。

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

そして、私はこれを取得し、OKです:

結果 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() は空の文字列をスキップしません。ただし、separator 引数の後の NULL 値はスキップされます。

したがって、null 値は単純に無視されます。

空の文字列もスキップしたい場合は、 ypercubeNULLIFで提案されているように、ミックスで関数をthrow を使用できます。

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