2016-05-05 41 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 

謝謝大家!