синтаксическая ошибка mysql

#mysql #syntax

#mysql #синтаксис

Вопрос:

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

 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
  

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

Комментарии:

1. Какую точную ошибку выдает вам MySQL? Должно помочь точно определить, какой бит неверен

Ответ №1:

Нанне прав, ваш IF() не является таблицей. Есть два способа обойти:

  1. Вы объединяетесь в обеих таблицах и помещаете IF в свой select, чтобы выбрать столбцы из нужной вам таблицы. (рекомендуется)
  2. Вы используете IF для создания запроса в строке, ПОДГОТАВЛИВАЕТЕ строку и ВЫПОЛНЯЕТЕ дескриптор. (не рекомендуется)

Ответ №2:

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

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

I после ОБЪЕДИНЕНИЯ вам нужна ссылка на таблицу, и я не думаю, что ваш if результат является таковым.

1: ошибка: # 1064 — У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘if (irc.source=’product’,@product, @accessrole) как p на p.id=irc.ItemId LIMIT 0′, в строке 1

Ответ №3:

Я не думаю, что я когда-либо видел, чтобы 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