MySQL 5.0报告“concat不存在”

时间:2010-11-10 19:15:57

标签: mysql sql function select concat

我的查询中包含复杂的连接。如果结果不为空,那么就像连接几个子选择的结果一样。它在我们的运行MySQL 5.1的开发服务器上工作正常(尽管复杂性让我有点不舒服)但我们的生产服务器运行5.0报告

FUNCTION database.concat does not exist

为什么会出现这种情况?不幸的是,升级不是一个选择,所以除非有人有一个好主意,否则我几乎不会重写这份报告。

查询如下(是的,我意识到我可怕地滥用了mysql。让我们暂时把它放在一边。如果有人知道如何通过别名引用子选择方法,这将是方便的,但我从来没有能够做到这一点,因此重复的subselect。如果任何参数是NULL,concat返回NULL,因此if语句。)

select (concat(if((select 
                       concat(if(b.foo is not null, b.foo, ""), 
                       " ", 
                       if(f.bar is not null, f.bar, ""))
                     from  `foo_table`  as f
                      left join `bar_table` as b
                        on b.SOME_ID = f.SOME_ID
                     where f.STUDENT_ID = t.STUDENT_ID
                       and bar.NewID = t.OldID order by bar.id limit 1) is not null,
                   (select 
                      concat(if(b.foo is not null, b.foo, ""), 
                       " ", 
                       if(f.bar is not null, f.bar, ""))
                     from  `foo_table`  as f
                      left join `bar_table` as b
                        on b.SOME_ID = f.SOME_ID
                     where f.STUDENT_ID = t.STUDENT_ID
                       and bar.NewID = t.OldID order by bar.id limit 1),
                   ""),
       " ",
       t.reason) as Reason
   from table as t

3 个答案:

答案 0 :(得分:15)

并确保concat(之间没有空格。这样的事情:

SELECT CONCAT ('a', 'b');

答案 1 :(得分:4)

CONCAT位于5.0

确保你没有写错字:

SELECT  CONTACT(id, name)
FROM    items;

Error Code: 1305
FUNCTION test.CONTACT does not exist

答案 2 :(得分:1)

我使用concat_ws重新编写了查询,它忽略了NULL个值,而不是像NULL那样返回concat。这是一个大大简化并实际工作的结果。

select concat_ws(" ", 
                 (select 
                    concat_ws(" ", b.bar, f.foo)
                   from  `foo_table`  as f
                   left join `bar_table` as  b
                     on b.SOME_ID = f.SOME_ID
                  where f.STUDENT_ID = t.STUDENT_ID
                    and f.NewID = t.OldID order by f.id limit 1 ),
               t.reason) as Reason,
   from table as t