我有两张桌子,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/