2010-09-08 77 views
1

我想在三個表中使用聯接查詢我發現在另一個帖子(帖子#5 here)。當我嘗試,我在phpMyAdmin表之一的SQL選項卡來使用它,它給了我一個錯誤:加入三張桌子?錯誤在phpMyAdmin

#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中的商家ID匹配這兩個表中的SkuAbbr,再加上來自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

問題是你有重複表引用 - 哪些工作,除了這包括表別名。

如果你想只看到那裏有支持兩個表中的記錄,使用行:

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 

這將顯示NULL對於不具有基於參加比賽的mv引用條件:

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 
+0

感謝您的更新。我想查看arrc_RedeemActivity中的所有行,但是我想查看arrec_Voucher表中具有匹配VoucherID的行的VoucherNbr值。現在使用左外連接,即使絕大多數的行在基於VoucherID的arrc_Voucher表中有相應的記錄,它仍會顯示NULL。我只是嘗試了簡單的左連接(跳過外層),看起來像返回我需要的內容。 – EmmyS 2010-09-08 22:04:44

+0

@EmmyS:在處理JOIN時,「OUTER」關鍵字是可選的,與「INNER」相同,所以我傾向於忽略它們。 – 2010-09-08 22:08:58

+0

從不想;評論刪除。 – EmmyS 2010-09-08 22:30:19