Синтаксическая ошибка MySQL - PullRequest
0 голосов
/ 19 апреля 2011

У меня следующий запрос:

select irc.*,p.*,@product :='prod_product',@accessrole :='pub_accessrole' 
from item_rel_coupon irc 
join user_rel_coupon urc on urc.userId = 7 and irc.couponId=urc.couponId 
left join if(irc.source='product',@product,@accessrole) as p on p.id=irc.itemId

Но я получаю синтаксическую ошибку. Почему?

Ответы [ 3 ]

0 голосов
/ 19 апреля 2011

Нанн права, ваш ЕСЛИ () не таблица.Есть два способа:

  1. Вы объединяете обе таблицы и ставите IF в поле выбора, чтобы выбрать столбцы из таблицы, которую вы хотите.(рекомендуется)
  2. Вы используете IF для создания запроса в строке, вы ПОДГОТОВЬТЕ строку и ВЫПОЛНИТЕ дескриптор.(не рекомендуется)
0 голосов
/ 19 апреля 2011

Я не думаю, что когда-либо видел IF (), используемый в качестве ссылки на таблицу в запросе, особенно если источник IRC может чередоваться между разными источниками ... Я бы изменил на ...

select 
      irc.*,
      if( p1.id = irc.itemid, p1.fld1, p2.fld1 ) as Fld1,
      if( p1.id = irc.itemid, p1.fld2, p2.fld2 ) as Fld2,
      if( p1.id = irc.itemid, p1.fld3, p2.fld3 ) as Fld3,
      if( p1.id = irc.itemid, p1.fld4, p2.fld4 ) as Fld4
   from 
      item_rel_coupon irc 
         join user_rel_coupon urc 
            on urc.userId = 7 
            and irc.couponId=urc.couponId 
         left join prod_product p1
            on p1.id = irc.itemid
         left join pub_accessrole p2
            on p2.id = irc.itemid
0 голосов
/ 19 апреля 2011

Эта часть выдает ошибку: 1

left join if(irc.source='product',@product,@accessrole) as p on p.id=irc.itemId

I после JOIN вам нужна ссылка на таблицу, и я не думаю, что ваш if результат равен единице.

1 : ошибка: # 1064 - ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'if (irc.source =' product ', @ product, @ accessrole) в качестве p на p.id = irc.itemId LIMIT 0,' в строке1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...