【问题标题】:Where clause not working in sql serverWhere子句在sql server中不起作用
【发布时间】:2016-12-30 13:31:04
【问题描述】:

下面是我的部分sql代码-

INTO #tmpRecDistData2
    FROM #TempReceivingUnmatchedUPCs tr 
        FULL JOIN #tmpDistributorRecords td 
            ON  ( tr.RecUPC=td.DistUPC )
            where
            tr.RecSupplierInvoiceNumber=td.DistSupplierInvoiceNumber

这里的 where 子句不起作用,无论两张发票相同还是不同,都会给出所有结果。 可能是什么原因?

编辑

RecSupplierInvoiceNumber       DistSupplierInvoiceNumber
00000000111807                                    6745
00000000111807                                    5635
00000000111807                                    5676

这是我使用 where 子句后得到的输出

SELECT td.DistSupplierInvoiceNumber,td.DistProductDescription,td.DistUPC,
       td.DistProductID, td.DistTranslationExists,td.DistInCatalog,      tr.RecSupplierInvoiceNumber,tr.RecProductDescription,tr.RecUPC,tr.RecProductID

    INTO #tmpRecDistData2
    FROM #TempReceivingUnmatchedUPCs tr 
        FULL JOIN #tmpDistributorRecords td 
            ON  ( tr.RecUPC=td.DistUPC )
            WHERE RecSupplierInvoiceNumber=DistSupplierInvoiceNumber

【问题讨论】:

  • 实际上这似乎不是真的。你绝对完全确定这正在发生吗?您的代码中没有其他OR <some other condition>
  • 由于Where 子句,它将充当Inner Join
  • 这是真的,即使我在 tr.RecSupplierInvoiceNumber='00111807' 处添加条件,它也不会过滤数据。这些数据是否来自缓存?
  • 不,这不应该发生(我敢打赌它不会真的发生)。没有其他条件?,这就是全部代码吗?
  • @PraveenSingh - 我们都是这里的志愿者,当有人(Lamak)向你寻求帮助时,没有人会因为帮助你而得到报酬,应该回复它。发布您输入的临时表和预期结果的完整查询示例数据

标签: sql-server


【解决方案1】:

让我们尝试创建一个独立的示例 - 下面的代码对我来说很好。

您能否将应用程序中的一些示例数据插入到这个玩具代码中,看看它是否按预期运行?如果是这样,那么问题出在代码的其他地方。

CREATE TABLE #TempReceivingUnmatchedUPCs (
RecUPC VARCHAR(20),
RecSupplierInvoiceNumber VARCHAR(20),
Foobar VARCHAR(20)
)

CREATE TABLE #tmpDistributorRecords  (
DistUPC VARCHAR(20),
DistSupplierInvoiceNumber VARCHAR(20),
Foobar VARCHAR(20)
)

INSERT INTO #TempReceivingUnmatchedUPCs
(RecUPC,RecSupplierInvoiceNumber,Foobar)
VALUES
('ABC',22,'FooA'),
('ABD',23,'BarB'),
('BBB',30,'RecA'),
('BBB',31,'RecB')

INSERT INTO #tmpDistributorRecords
(DistUPC,DistSupplierInvoiceNumber,Foobar)
VALUES
('ABA',22,'FooC'),
('BBD',43,'BarD'),
('BBB',30,'DistA'),
('BBB',32,'DistB')


SELECT *
FROM #TempReceivingUnmatchedUPCs tr 
        FULL JOIN #tmpDistributorRecords td 
            ON  ( tr.RecUPC=td.DistUPC )
            where
            tr.RecSupplierInvoiceNumber=td.DistSupplierInvoiceNumber

DROP TABLE #TempReceivingUnmatchedUPCs
DROP TABLE #tmpDistributorRecords

对我来说,这会产生

RecUPC               RecSupplierInvoiceNumber Foobar               DistUPC              DistSupplierInvoiceNumber Foobar
-------------------- ------------------------ -------------------- -------------------- ------------------------- --------------------
BBB                  30                       RecA                 BBB                  30                        DistA

并且 RecSupplierInvoiceNumber = DistSupplierInvoiceNumber 符合预期

【讨论】:

  • 这与我正在尝试做的相同,并且期望相同的输出。甚至我,我的高级开发人员也很困惑为什么 where 子句不起作用。
  • @PraveenSingh 我真诚地怀疑你。我已经在这个问题中多次询问这是否是整个代码,而你拒绝回答
  • @PraveenSingh 这表明代码中的其他地方,其他东西正在插入 #tmpRecDistData2 。 . .您可以搜索其余代码以查找对该表的其他引用吗?
  • 对不起@Lamak,我将提供更多可能的代码。
猜你喜欢
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多