如何用MS Access SQL关联Master与Master_Split表查询主记录及拆分记录
解决方案:关联Master表与拆分记录表的统一查询
没问题,我来帮你搞定这个查询需求!你现在需要把主交易记录(Master表)和对应的拆分日记账条目(Master_Split表)以统一格式查询出来,之前用右连接只获取拆分条目,调整关联方式就能实现目标。
核心逻辑分析
Master表的每条记录有唯一masterID,Master_Split通过import_Master_ID关联主表,我们需要以主表为基础,关联它的所有拆分条目,这里分两种常见场景:
场景1:需要包含所有主记录(即使没有拆分条目)
用LEFT JOIN可以保证不管主记录有没有对应的拆分,都会被查询出来,拆分字段为空时会显示NULL,适合需要完整主记录清单的场景:
SELECT -- 主表字段,根据你的实际需求调整 M.masterID AS 主记录ID, M.transaction_date AS 交易日期, M.amount AS 主交易金额, -- 拆分表字段,同样按需调整 MS.splitID AS 拆分分录ID, MS.journal_entry AS 日记账分录内容, MS.split_amount AS 拆分金额 FROM Master M LEFT JOIN Master_Split MS ON M.masterID = MS.import_Master_ID ORDER BY M.masterID, MS.splitID; -- 按主记录ID+拆分ID排序,格式更统一
场景2:只需要有拆分条目的主记录
如果只关心那些已经被拆分成日记账的主交易,用INNER JOIN就可以,它只会返回两边都有匹配的记录:
SELECT M.masterID AS 主记录ID, M.transaction_date AS 交易日期, M.amount AS 主交易金额, MS.splitID AS 拆分分录ID, MS.journal_entry AS 日记账分录内容, MS.split_amount AS 拆分金额 FROM Master M INNER JOIN Master_Split MS ON M.masterID = MS.import_Master_ID ORDER BY M.masterID, MS.splitID;
小技巧:优化统一格式显示
如果想让无拆分的主记录显示更友好,比如把NULL替换成提示文本,可以用COALESCE函数:
SELECT M.masterID AS 主记录ID, M.transaction_date AS 交易日期, M.amount AS 主交易金额, COALESCE(CAST(MS.splitID AS VARCHAR), '无拆分分录') AS 拆分分录ID, COALESCE(MS.journal_entry, '无对应日记账内容') AS 日记账分录内容, COALESCE(CAST(MS.split_amount AS VARCHAR), '0') AS 拆分金额 FROM Master M LEFT JOIN Master_Split MS ON M.masterID = MS.import_Master_ID ORDER BY M.masterID;
这样查询结果的格式会更统一,不管有没有拆分条目都能清晰展示。
内容的提问来源于stack exchange,提问作者jcarroll
相关产品推荐
相关产品推荐

