использование group_concat с другими критериями выбора - mySQL - PullRequest
1 голос
/ 27 сентября 2010

У меня есть две таблицы, arrc_PurchActivity и arrc_Voucher.Таблица покупательской активности содержит несколько записей на покупку, связанных с помощью авторизации кредитной карты.Мне нужно вернуть одну строку за покупку, а также получить поле из таблицы ваучеров.Если я просто возьму несколько полей из таблицы покупательской активности, например:

SELECT group_concat( VoucherID ) , CcAuthCode FROM arrc_PurchaseActivity GROUP BY CcAuthCode

, то все работает нормально, возвращая что-то вроде этого:

group_concat( VoucherID )  | CcAuthCode
=========================================
610643,611139,610642       | 8LUPDN

Что мне нужно сделать, это тянутьв другом связанном поле (VoucherNbr), на этот раз из таблицы arrc_Voucher, где VoucherID таблицы ваучеров равен VoucherID таблицы покупок.В этом случае, поскольку VoucherID является конкатенацией, мне нужно вернуть объединенный столбец VoucherNbr для каждого VoucherID в объединенном столбце.Ясно, как грязь, верно?То, что мне нужно, выглядело бы так:

group_concat( VoucherID )  | group_concat( VoucherNbr)  |  CcAuthCode
===========================|============================|=============
610643,611139,610642       | 123,456,789                |  8LUPDN 

Другими словами, VoucherNbr для VoucherID 610643 равен 123, VoucherNbr для 611139 - 456 и т. Д.

Кто-нибудь может мне помочь?Это над моей головой ...

1 Ответ

2 голосов
/ 27 сентября 2010

Использование:

   SELECT pa.ccauthcode,
          GROUP_CONCAT(DISTINCT pa.voucherid) AS voucherids,
          GROUP_CONCAT(v.vouchernbr) AS vouchernbrs
     FROM ARRC_PURCHASEACTIVITY pa 
LEFT JOIN ARRC_VOUCHER v ON v.voucherid = pa.voucherid
 GROUP BY pa.ccauthcode

Я указал DISTINCT в GROUP_CONCAT для ваучера, потому что возможно, что у вас будет несколько ваучеров на ваучер. Если нет, удалите DISTINCT.

LEFT JOIN гарантирует, что вы получите ARRC_PURCHASEACTIVITY записей, которые не имеют подтверждающих записей в ARRC_VOUCHER. Измените «LEFT JOIN» на «JOIN», если вы не хотите этого поведения.

...