大家晚上好!
我遇到了一个我无法理解的非常奇怪的问题。
我有 3 个表(零件表、零件移动历史记录和零件详细信息表)。
我要做的是让结果集返回批次#、零件#、产品描述、数量、零件位置、当前库存(相对于完整历史记录)以及上次移动产品的人。
现在,对于查询。当我运行以下查询时,我得到 4,751 行的结果集;这完全符合我的预期结果。但是,当我尝试添加用户 ID 字段时,我得到的结果集为 186,573。这个大型结果集似乎提取了所有历史数据,而不是仅将用户 ID 与我实际需要的 4,751 行匹配。
从我需要的部件表 (prod_desc) 从我需要的部件详细信息表 (lot,part#,lotquantity,prtlocation) 从我需要的部件移动历史表 (move_date,user_id)
4,751 查询:
SELECT DISTINCT
inv.lot,
inv.part#,
prt.prod_desc,
inv.lotquantity,
inv.prtlocation,
MAX(mv.move_date)AS 'Move Date'
FROM invdet AS inv
LEFT JOIN movetable AS mv ON inv.part# = mv.part#
LEFT JOIN partmstr AS prt ON inv.part# = prt.part#
WHERE inv.lot IS NOT NULL
GROUP BY inv.lot,inv.part#,prt.prod_desc,inv.lotquantity,inv.prtlocation
ORDER BY inv.prtlocation
186,573 查询:
SELECT DISTINCT
inv.lot,
inv.part#,
prt.prod_desc,
inv.lotquantity,
inv.prtlocation,
MAX(mv.move_date)AS 'Move Date'
mv.user_id
FROM invdet AS inv
LEFT JOIN movetable AS mv ON inv.part# = mv.part#
LEFT JOIN partmstr AS prt ON inv.part# = prt.part#
WHERE inv.lot IS NOT NULL
GROUP BY inv.lot,inv.part#,prt.prod_desc,inv.lotquantity,inv.prtlocation,mv.user_id
ORDER BY inv.prtlocation
如果我不使用 MAX 函数,我不会获得当前库存,而是会在表中获得所有结果,而我不需要。我还在学习,我的 GROUP BY 有很多不足之处,因为我还在纠结它(欢迎提出建议!)。我敢肯定有一个子查询我可以在这里的某个地方抛出,但我仍在弄清楚这些。任何帮助是极大的赞赏!