【问题标题】:Error CONCAT MySQL - No concat 2 or more values错误 CONCAT MySQL - 没有 concat 2 或更多值
【发布时间】:2016-05-05 15:40:37
【问题描述】:

美好的一天!

我尝试执行以下脚本:

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 - vi

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

市政 - mun

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

部门 - 部门

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

正确的结果应该是:

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

但我的结果只有:

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

不连接其他 2 个值字段。

发生了什么?

LocalServer:MySQL 5.6.25 版本

谢谢!

【问题讨论】:

  • 我试过你的查询并得到正确的结果:sqlfiddle.com/#!9/4d0ac3/1
  • 太奇怪了。我在本地服务器和生产服务器的链接中执行相同的信息,我得到了同样的错误。
  • 不应该mun.id_departmentodep.id_departmento 吗?您实际上不需要将别名放在表格图中,您在其上方有表格名称。
  • 您的查询必须与您显示的不同。因为即使连接没有找到匹配项,IFNULL 也会阻止连接空值,因此您应该始终使用两个逗号,例如 chimaltenango, , 5
  • 我修改了别名,用一些条件查询。

标签: mysql sql field concat


【解决方案1】:

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

市政 - mun

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

部门 - 部门

+---------------------+-----------------+
|    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

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2016-10-07
    • 2013-11-07
    相关资源
    最近更新 更多