Отчет MySQL 5.0 "concat не существует" - PullRequest
2 голосов
/ 10 ноября 2010

У меня есть запрос со сложной конкатенацией в нем. Это что-то вроде объединения результатов нескольких вложенных выборок, если результаты не равны нулю. Он отлично работает (хотя меня это немного напрягает) на нашем сервере разработки, на котором работает MySQL 5.1, но на нашем рабочем сервере, который запускает отчеты 5.0

FUNCTION database.concat does not exist

Есть идеи, почему это может быть? Обновление, к сожалению, пока не подходит, поэтому, если у кого-то нет яркой идеи, я почти застряну в переписывании этого отчета.

Запрос выглядит следующим образом (Да, я понимаю, что ужасно злоупотребляю mysql. Давайте пока отложим это. Если кто-нибудь знает, каким образом можно ссылаться на подвыбор с помощью псевдонима, что было бы удобно, но я никогда в состоянии сделать это, следовательно, повторный подвыбор. Также concat возвращает NULL, если какой-либо из аргументов 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 ]

16 голосов
/ 10 ноября 2010

И убедитесь, что между concat и ( нет пробелов.Примерно так:

SELECT CONCAT ('a', 'b');
4 голосов
/ 10 ноября 2010

CONCAT доступен в 5.0.

Убедитесь, что вы не опечатали:

SELECT  CONTACT(id, name)
FROM    items;

Error Code: 1305
FUNCTION test.CONTACT does not exist
1 голос
/ 10 ноября 2010

Я переписал запрос, используя 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
...