我的查询中包含复杂的连接。如果结果不为空,那么就像连接几个子选择的结果一样。它在我们的运行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
答案 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