我有两张桌子,arrc_Purchavity和arrc_代金券。购买活动表包含每次购买的多个记录,这些记录由信用卡授权绑定在一起。每次购买我需要返回一行,并从凭证表中拉入一个字段。
如果我只是从purchase activity表中获取几个字段,如下所示:

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

它工作正常,返回如下内容:
group_concat( VoucherID )  | CcAuthCode
=========================================
610643,611139,610642       | 8LUPDN

我需要做的是拉入另一个contated字段(VoucherNbr),这次是从arrc_Voucher表中拉入的,其中Voucher表的VoucherID等于purchase表的VoucherID。在这种情况下,由于VoucherID是一个连接,我需要为连接列中的每个VoucherID返回VoucherNbr的连接列。像泥一样干净,对吧?我需要的是这样的:
group_concat( VoucherID )  | group_concat( VoucherNbr)  |  CcAuthCode
===========================|============================|=============
610643,611139,610642       | 123,456,789                |  8LUPDN

也就是说,610643的凭证号是123,611139的凭证号是456等等。
有人能帮我吗?这比我想象的要高得多。。。

最佳答案

使用:

   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

我在组CONCAT中为voucherid指定了DISTINCT,因为一个voucherid可能有多个vouchernbr。如果没有,请删除DISTINCT。
左连接确保您将得到ARRC_PURCHASEACTIVITY中没有支持记录的ARRC_VOUCHER记录。如果你不想这样做,就把“LEFT JOIN”改成“JOIN”。

关于sql - 使用group_concat和其他选择条件-MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3806110/

10-12 12:48