在特定的"位置"条件下获得错误的结果



大师。我一直在处理我的问题,如果有任何帮助或建议,我将不胜感激。请检查这张照片。我不明白为什么我在底部查询中得到了错误的结果。正如您所看到的,与先前查询的区别仅在于"WHERE"子句,但这种区别必须导致相同的结果,因为它是一对一联接。重要的是v_last_part_info是一个视图,我最近更改了它。我认为这是由于QEP缓存,但我尝试了OPTION (RECOMPLIE),甚至这里描述的解决方案。结果仍然是一样的。求你了,救命!我错过了什么?


附言:[OBJECT_ID]是列名,不是内置的函数


附言:ANOTHER_DB有不同的排序规则,这就是我需要collate database_default 的原因


select Tracking
    , SoItem 
from v_last_part_info 
where Tracking = '4170664293'
Tracking    SoItem
4170664293  20
--================================================================================--
select 
    lpi.Tracking
   , lpi.SoItem
from v_last_part_info lpi
    join ANOTHER_DB..SO_HEADER h on lpi.Tracking = h.[OBJECT_ID] collate database_default
where Tracking = '4170664293'
Tracking    SoItem
4170664293  20
--================================================================================--
select 
    lpi.Tracking
    , lpi.SoItem
from v_last_part_info lpi
    join ANOTHER_DB..SO_HEADER h on lpi.Tracking = h.[OBJECT_ID] collate database_default
where [OBJECT_ID] = '4170664293'
Tracking    SoItem
4170664293  10

感谢GarethD,我找到了原因。这是因为v_last_part_info内部的row_number()函数。根据MSDN上的定义:

不能保证使用ROW_NUMBER()的顺序将与每次执行完全相同除非以下条件成立。

  1. 分区列的值是唯一的
  2. ORDER BY的值是唯一的
  3. 分区列和ORDERBY列的值的组合是唯一的

在我的情况下,选项2没有得到保障。

最新更新