如何在内连接中返回NULL值?需显示无最大笔记号的Unique ID
解决方法:保留无笔记的Unique ID并获取最大笔记号
你的核心问题出在查询里的INNER JOIN——虽然你一开始用了LEFT JOIN关联QUEUE_NOTES,但后面的INNER JOIN子查询会过滤掉那些没有对应笔记的Unique ID(因为这些行在子查询里没有匹配项,INNER JOIN会直接排除它们)。
要实现同时显示有最大笔记号和无笔记的Unique ID,可以用两种常见方式:
方式1:先计算每个Unique ID的最大笔记号,再左关联
这种方式适合只需要Unique ID和最大笔记号的场景:
SELECT q.[Unique ID], max_notes.[Max Note Number] FROM Q_NOT_PROC q LEFT JOIN ( -- 子查询:算出每个Order Item对应的最大笔记号 SELECT [Order Item UniqueID], MAX([Note Number]) AS [Max Note Number] FROM QUEUE_NOTES GROUP BY [Order Item UniqueID] ) max_notes ON max_notes.[Order Item UniqueID] = q.[Unique ID]
这样所有Q_NOT_PROC里的Unique ID都会被保留,没有对应笔记的行,[Max Note Number]会显示为NULL。
方式2:保留最大笔记号对应的完整笔记记录
如果需要同时展示最大笔记号对应的那条笔记的所有字段(就像你原查询里的qn.*),可以用窗口函数来标记每组的最大笔记行:
SELECT q.[Unique ID], qn.[Note Number], qn.*, q.* FROM Q_NOT_PROC q LEFT JOIN ( -- 用ROW_NUMBER标记每个UniqueID的最大笔记行 SELECT *, ROW_NUMBER() OVER ( PARTITION BY [Order Item UniqueID] ORDER BY [Note Number] DESC ) AS rn FROM QUEUE_NOTES ) qn ON qn.[Order Item UniqueID] = q.[Unique ID] AND qn.rn = 1
这里的ROW_NUMBER()会按[Order Item UniqueID]分组,每组里按[Note Number]倒序排列,标记第一行(也就是最大笔记号的那条记录)。通过LEFT JOIN并筛选rn=1,既保留了所有Unique ID,又能拿到对应最大笔记的完整信息,无笔记的行对应的qn.*会全部显示为NULL。
内容的提问来源于stack exchange,提问作者Carley Guidry
相关产品推荐
相关产品推荐

