使用group_concat和其他选择标准 - mySQL

时间:2010-09-27 17:11:18

标签: sql mysql group-concat

我有两个表,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是串联,我需要为连接列中的每个VoucherID返回一个连续的VoucherNbr列。清楚如泥,对吗?我需要的是这样的:

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

换句话说,VoucherID 6106的VoucherNbr为123,611139的VoucherNbr为456等。

任何人都可以帮助我吗?这是我的头脑......

1 个答案:

答案 0 :(得分:2)

使用:

   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

我在GROUP_CONCAT中为voucherid指定了DISTINCT,因为你可能有多个vouchernbr到一个voucherid。如果没有,请删除DISTINCT。

LEFT JOIN可确保您获得ARRC_PURCHASEACTIVITY中没有支持记录的ARRC_VOUCHER条记录。如果您不想要此行为,请将“LEFT JOIN”更改为“JOIN”。