1

別の投稿(ここの投稿#5)で見つけた3つのテーブルのクエリで結合を使用しようとしています。phpMyAdminのテーブルの1つの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からすべての列を取得し、さらにこれら2つのテーブルでマーチャントIDが一致するarrc_MerchantからSkuAbbrを取得し、さらにこれら2つのテーブルでVoucherIDが一致するarrc_VoucherからVoucherNbrを取得することです。)

テーブルサンプルを追加するために編集

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
4

1 に答える 1

2

問題は、テーブル参照が重複していることでした。これには、テーブルのエイリアシングが含まれていることを除けば、機能します。

両方のテーブルにサポートレコードがある行のみを表示する場合は、次を使用します。

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基準に基づいて一致しない参照mと参照に対してNULLが表示されます。v

   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
于 2010-09-08T21:16:12.280 に答える