2011-04-19 5 views
0

J'ai la requête suivante:mysql erreur de syntaxe

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 

Mais je reçois une erreur de syntaxe. Pourquoi?

+1

Quelle est l'erreur exacte que MySQL vous donne? Devrait aider à identifier quel bit est faux – fin1te

Répondre

0

Nanne a raison, votre IF() n'est pas une table. Il y a deux façons de contourner:

  1. Vous rejoignez sur les deux tables, et de mettre le IF dans votre sélection pour sélectionner les colonnes de la table que vous voulez. (recommandé)
  2. Vous utilisez l'IF pour créer la requête dans une chaîne, vous PRÉPAREZ la chaîne et EXECUTEz le handle. (Non recommandé)
0

Cette partie donne une erreur:

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

Je vous après une JOIN besoin d'une référence de table, et je ne pense pas que résultat de votre if est un.

: l'erreur: # 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'if (irc.source =' produit ', @ product, @ accessrole) comme p sur p.id = irc.itemId LIMIT 0,' à la ligne 1

0

Je ne pense pas que je l'ai jamais vu un IF() utilisé comme référence de table dans une requête, en particulier si la source d'IRC peut alterner entre les différentes sources ... Je changerais à ...

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