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