#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() не является таблицей. Есть два способа обойти:
- Вы объединяетесь в обеих таблицах и помещаете IF в свой select, чтобы выбрать столбцы из нужной вам таблицы. (рекомендуется)
- Вы используете 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