多关联表SQL查询:获取INV表字段及关联表最早审批日期
解决方案
按照你的需求,这里是填充好子查询后的完整SQL语句:
SELECT INV.Aa, INV.Bb, INV.Cc, S.EarliestApprovedDate FROM INV LEFT JOIN ( -- 子查询:关联所有表,筛选并获取每个库存对应的最早审批日期 SELECT S.InventoryId, -- 对应INV.ID的关联字段 MIN(T.Date) AS EarliestApprovedDate FROM B INNER JOIN S ON B.sID = S.sID INNER JOIN T ON S.sID = T.sID INNER JOIN T_Lookup ON T.tID = T_Lookup.tID WHERE B.bID = MyID AND B.SomeOtherColumn = 1 AND T_Lookup.Type = 'Approved' GROUP BY S.InventoryId ) S ON INV.ID = S.InventoryId
逻辑说明:
- 从表
B筛选出匹配MyID且SomeOtherColumn=1的sID - 关联表
S拿到对应的库存ID(InventoryId),由于sID和INV.ID是一对一关系,分组后不会出现重复结果 - 关联表
T和T_Lookup,仅保留Type为"Approved"的记录 - 用
MIN(T.Date)获取每个库存对应的最早审批日期,按InventoryId分组确保每个库存仅返回一条结果
补充说明:
根据你提到的每个sID至少有一条"Approved"记录的前提,当前用INNER JOIN就能保证所有符合条件的库存都能拿到对应日期;如果需要强制保留所有INV行(哪怕不存在对应记录,虽然你说明不存在这种情况),可以将子查询内的INNER JOIN调整为LEFT JOIN。
内容的提问来源于stack exchange,提问作者ysi_d
相关产品推荐
相关产品推荐

