2016-05-05 40 views
0

美好的一天!错误CONCAT MySQL - 没有concat 2或更多值

我试图执行后续脚本:上表

SELECT 
concat_ws(", ",if(dep.id_departamento=0,"",ifnull(dep.descripcion,"")), 
     if(mun.id_municipio=0,"",ifnull(mun.descripcion,"")) , 
     if(ifnull(vi.zona ,0)=0,"", cast(vi.zona as char))) as concatAddress 
FROM visados vi 
left join municipios mun on mun.id_municipio = vi.id_municipio 
left join departamentos dep on dep.id_departamento = vi.id_departamento 

的信息:

Visados - 六

+-------+--------------------+-----------------+---------+ 
| id | id_departamento | id_municipio | zona | 
+-------+--------------------+-----------------+---------+ 
| 1 |  1   |  1  | 5 | 
+-------+--------------------+-----------------+---------+ 

Municipios - 门

+------------------+---------------+ 
| id_municipio | descripcion | 
+------------------+---------------+ 
|   1  | chimaltenango | 
+------------------+---------------+ 

Departamentos - DEP

+---------------------+---------------+ 
| id_departamento | descripcion | 
+---------------------+---------------+ 
|   1   | chimaltenango | 
+---------------------+---------------+ 

正确的结果应该是:

+------------------------------------+ 
|   concatAddress   |  
+------------------------------------+ 
| chimaltenango, chimaltenango, 5 | 
+------------------------------------+ 

但我的结果是唯一的:

+------------------+ 
| concatAddress |  
+------------------+ 
| chimaltenango | 
+------------------+ 

没有的毗连的其他2个值的字段。

发生了什么事?

LocalServer:MySQL 5.6.25版本

谢谢!

+2

我试过你的查询并得到正确的结果:http://www.sqlfiddle.com/#99/4d0ac3/1 – Barmar

+0

太奇怪了。我在链接中执行相同的信息到我的本地服务器和生产服务器,并且我得到了同样的错误。 –

+0

不应该'mun.id_departmento'为'dep.id_departmento'?您并不需要将别名放在表格图中,而是将表名称放在表格中。 – Barmar

回答

1

问题是每行在字符串的末尾都有一个\r

Municipios - 门

+------------------+-----------------+ 
| id_municipio | descripcion | 
+------------------+-----------------+ 
|   1  | chimaltenango\r | 
+------------------+-----------------+ 

Departamentos - DEP

+---------------------+-----------------+ 
| id_departamento | descripcion | 
+---------------------+-----------------+ 
|   1   | chimaltenango\r | 
+---------------------+-----------------+ 

使用Trim我解决了这个问题:

SELECT 
concat_ws(", ",if(dep.id_departamento=0,"",ifnull(trim(BOTH "\r" FROM dep.descripcion),"")), 
     if(mun.id_municipio=0,"",ifnull(trim(BOTH "\r" FROM mun.descripcion),"")) , 
     if(ifnull(vi.zona ,0)=0,"", cast(vi.zona as char))) as concatAddress 
FROM visados vi 
left join municipios mun on mun.id_municipio = vi.id_municipio 
left join departamentos dep on dep.id_departamento = mun.id_departamento 

谢谢大家!