内部联接查询不检索最新结果

时间:2018-10-04 13:36:05

标签: sql sql-server navision

我需要更新商品字段“供应商编号”。根据“来源编号”字段的最新结果表“项目分类帐条目”

我试图在两个表(项目和项目分类帐条目)之间进行内部联接,但是此查询的某些结果不是最新的。

因此,如果我针对特定情况进行此查询,

select top(1)
    [MR$Item].[No_], 
    [MR$Item Ledger Entry].[Item No_],
    [MR$Item].[Vendor No_], 
    [MR$Item Ledger Entry].[Source No_], 
    [MR$Item Ledger Entry].[Entry Type],
    [MR$Item Ledger Entry].[Posting Date]
from [MR$Item]
    left outer join [MR$Item Ledger Entry] on [MR$Item].[No_] = [MR$Item Ledger Entry].[Item No_] 
where
    [MR$Item Ledger Entry].[Entry Type] = 0
    and [MR$Item].[Vendor No_] <> [MR$Item Ledger Entry].[Source No_]
    AND year([MR$Item Ledger Entry].[Posting Date])>=2018
    AND [MR$Item].[No_] = '3510100011' 
order by [MR$Item Ledger Entry].[Posting Date] DESC

我得到这个结果

No_         Item No_    Vendor No_  Source No_  Entry Type  Posting Date
3510100011  3510100011  505881497   172140064   0           2018-09-27 00:00:00.000

但是做这个简单的选择,我可以看到最后的结果不正确

   select top(1)
        [MR$Item Ledger Entry].[Item No_],
        [MR$Item Ledger Entry].[Source No_], 
        [MR$Item Ledger Entry].[Entry Type],
        [MR$Item Ledger Entry].[Posting Date]
    from [MR$Item Ledger Entry]
    where
        [MR$Item Ledger Entry].[Entry Type] = 0 AND 
        year([MR$Item Ledger Entry].[Posting Date]) >= 2018 AND
        [MR$Item Ledger Entry].[Item No_] = '3510100011' 
order by [MR$Item Ledger Entry].[Posting Date] DESC

结果是

Item No_    Source No_  Entry Type  Posting Date
3510100011  508606977   0   2018-01-09 00:00:00.000

正确的结果是项目“ 3510100011”,我应该使用数字“ 508606977”。

我在做什么错了?

1 个答案:

答案 0 :(得分:-1)

因为在查询中,您输入了:

AND [MR$Item Ledger Entry].[Item No_]='3510100011' 

而且,您可以将左联接更改为内部联接,因为您正在做[MR $ Item Ledger Entry]表上的位置