You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写MySQL查询按客户ID展示支付及交易明细?

按客户展示全量支付交易明细实现方案

现有数据表结构

tbl_customer(客户表)

id | name
1  | Ahmad
2  | Taha
3  | Amir

tbl_payment(支付类型表)

id | payment
1  | food
2  | drink

tbl_transaction(交易记录表)

id | id_customer | id_payment | date
1  | 1           | 1          | 2022-08-20
2  | 2           | 1          | 2022-08-21
3  | 2           | 2          | 2022-08-21

需求说明

需要按客户ID展示支付交易明细,要求每个客户都显示所有支付类型的记录:有对应交易的显示交易日期,无交易的日期字段显示null,具体预期结果如下:

  • Ahmad的预期结果:
id_payment | payment | date
1          | food    | 2022-08-20
2          | drink   | null
  • Taha的预期结果:
id_payment | payment | date
1          | food    | 2022-08-21
2          | drink   | 2022-08-21
  • Amir的预期结果:
id_payment | payment | date
1          | food    | null
2          | drink   | null

实现SQL语句

SELECT 
    p.id AS id_payment,
    p.payment,
    t.date
FROM 
    tbl_customer c
CROSS JOIN 
    tbl_payment p
LEFT JOIN 
    tbl_transaction t ON c.id = t.id_customer AND p.id = t.id_payment
-- 如需单独查询某一个客户,可添加WHERE条件,比如查询Ahmad:
-- WHERE c.id = 1
ORDER BY 
    c.id, p.id;

逻辑说明

  1. CROSS JOIN tbl_payment:让每个客户和所有支付类型做笛卡尔积,生成每个客户对应所有支付类型的基础记录,确保不会遗漏任何一种支付类型。
  2. LEFT JOIN tbl_transaction:基于客户ID和支付类型ID左连接交易表,有匹配交易的会带出日期,没有匹配的日期字段自动显示null。
  3. 如需单独查看某一个客户的明细,只需在语句末尾添加WHERE c.id = [目标客户ID]即可。

内容的提问来源于stack exchange,提问作者Toha Kepriben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:35:22