объединить на трех столах? Ошибка в phpMyAdmin - PullRequest
1 голос
/ 09 сентября 2010

Я пытаюсь использовать запрос объединения трех таблиц, который я нашел в другом посте (пост # 5 здесь ). Когда я пытаюсь использовать это на вкладке 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, плюс SkuAbbr из arrc_Merchant, где идентификаторы продавцов совпадают в этих двух таблицах, плюс VoucherNbr из arrc_Voucher, где идентификаторы 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 Ответ

1 голос
/ 09 сентября 2010

Проблема заключалась в том, что у вас были повторяющиеся ссылки на таблицы - это работало бы, за исключением того, что это включало псевдоним таблицы.

Если вы хотите видеть только строки, в которых есть записи поддержки в обеих таблицах, используйте:

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 для ссылок m и v, которые не соответствуют по критериям JOIN:

   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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...