2011-04-19 58 views
0

我有以下查询: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给你的确切错误是什么?应该帮助查明哪一位错误 – fin1te 2011-04-19 12:01:01

回答

0

Nanne是对的,你的IF()不是表格。有两种方法解决方法:

  1. 你在两个表连接,并把 如果您的选择来选择你想要的表 列。 (推荐)
  2. 您使用IF在字符串中创建查询 ,您准备字符串 并EXECUTE句柄。 (不推荐 )
0

这部分给出了一个错误:我以后

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

一个连接你需要一个表引用,我不认为你的if的结果之一。

:错误: #1064 - 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在'if(irc.source ='product',@ product,@ accessrole)'旁边使用正确的语法作为p.id = irc.itemId LIMIT 0' 1

0

我不认为我见过的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