如何合并无外键关联的FundsPlanning与GradeMst表的查询结果?
解决方案
你需要通过PurchaseContract作为中间关联表,把FundsPlanning、SupplierMst和GradeMst串联起来——它同时关联了SupplierId和GradeId,刚好能弥补FundsPlanning和GradeMst之间无直接关联的问题。
完整SQL查询语句
SELECT FP.SupplierId, FP.WeightLoaded, FP.DeliveryDate, FP.InvoiceAmount, GM.Grade AS GradeName -- 重命名为需求的GradeName字段 FROM FundsPlanning FP -- 关联供应商表,保留你原查询的逻辑 INNER JOIN SupplierMst SM ON FP.SupplierId = SM.SupplierId -- 通过SupplierId关联采购合同表,获取该供应商对应的GradeId INNER JOIN PurchaseContract PC ON FP.SupplierId = PC.SupplierId -- 通过采购合同的GradeId关联等级表,拿到GradeName INNER JOIN GradeMst GM ON PC.GradeId = GM.GradeId WHERE SM.SupplierId = 2; -- 过滤目标供应商
逻辑说明
- 保留你原有的
FundsPlanning与SupplierMst的关联逻辑,确保获取供应商的基础业务数据。 - 新增与
PurchaseContract的关联:利用SupplierId匹配,拿到该供应商对应的所有GradeId记录。 - 再通过
PurchaseContract的GradeId关联GradeMst,直接取出对应的GradeName字段。
注意事项
如果同一个供应商对应多个Grade,或者同一笔FundsPlanning记录关联多份采购合同,查询结果可能出现重复行。若需要去重,可在SELECT后添加DISTINCT关键字:
SELECT DISTINCT FP.SupplierId, FP.WeightLoaded, FP.DeliveryDate, FP.InvoiceAmount, GM.Grade AS GradeName -- 后续JOIN和WHERE语句不变
内容的提问来源于stack exchange,提问作者Geeta Chauhan
相关产品推荐
相关产品推荐

