加入三张桌子? phpMyAdmin出错

时间:2010-09-08 21:14:31

标签: sql mysql mysql-error-1066

我正在尝试在另一篇文章(帖子#5 here)中找到的三个表查询中使用连接。当我尝试在phpMyAdmin中的一个表的SQL选项卡中使用它时,它给了我一个错误:

#1066 - Not unique table/alias: 'm'

我正在尝试使用的确切查询是:

select r.*,m.SkuAbbr, v.VoucherNbr from arrc_RedeemActivity r, arrc_Merchant m, arrc_Voucher v
LEFT OUTER JOIN arrc_Merchant m ON (r.MerchantID = m.MerchantID)
LEFT OUTER JOIN arrc_Voucher v ON (r.VoucherID = v.VoucherID)

我不完全确定它会做我需要做的事情,或者我正在使用正确的联接(我对SQL的掌握在这一点上非常有限),但我希望至少看到它产生了什么。

(我正在尝试做的事情,如果有人愿意提供帮助,则从arrc_RedeemActivity获取所有列,从arrc_Merchant获取SkuAbbr,其中商家ID在这两个表中匹配,加上来自arrc_Voucher的VoucherNbr,其中VoucherID在这两个表中匹配。)

已编辑添加表格示例

Table arrc_RedeemActivity
RedeemID | VoucherID | MerchantID | RedeemAmt
----------------------------------------------
1        | 2         |  3         | 25
2        | 6         |  5         | 50

Table arrc_Merchant
MerchantID | SkuAbbr
---------------------
3         | abc         
5         | def         

Table arrc_Voucher
VoucherID | VoucherNbr
-----------------------
2         | 12345       
6         | 23456

理想情况下,我想回来的是:

RedeemID | VoucherID | MerchantID | RedeemAmt | SkuAbbr | VoucherNbr
-----------------------------------------------------------------------
1        | 2         | 3          | 25        | abc     | 12345
2        | 2         | 5          | 50        | def     | 23456

1 个答案:

答案 0 :(得分:1)

问题是你有重复的表引用 - 这可以工作,除了包括表别名。

如果您只想查看两个表中都有支持记录的行,请使用:

SELECT r.*,
       m.SkuAbbr, 
       v.VoucherNbr 
  FROM arrc_RedeemActivity r
  JOIN arrc_Merchant m ON m.merchantid = r.merchantid
  JOIN arrc_Voucher v ON v.voucherid = r.voucherid

对于根据JOIN条件没有匹配项的mv引用,这将显示NULL:

   SELECT r.*,
          m.SkuAbbr, 
          v.VoucherNbr 
     FROM arrc_RedeemActivity r
LEFT JOIN arrc_Merchant m ON m.merchantid = r.merchantid
LEFT JOIN arrc_Voucher v ON v.voucherid = r.voucherid