Sql server Where子句在sql server中不起作用
下面是我的sql代码的一部分-Sql server Where子句在sql server中不起作用,sql-server,Sql Server,下面是我的sql代码的一部分- INTO #tmpRecDistData2 FROM #TempReceivingUnmatchedUPCs tr FULL JOIN #tmpDistributorRecords td ON ( tr.RecUPC=td.DistUPC ) where tr.RecSupplierInvoiceNumber=td.DistSupplierInvoiceNumbe
INTO #tmpRecDistData2
FROM #TempReceivingUnmatchedUPCs tr
FULL JOIN #tmpDistributorRecords td
ON ( tr.RecUPC=td.DistUPC )
where
tr.RecSupplierInvoiceNumber=td.DistSupplierInvoiceNumber
此处where子句不起作用,并给出所有结果,无论两张发票是相同的还是不同的。
原因可能是什么
编辑
这是我在使用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
让我们尝试创建一个自包含的示例-下面的代码对我来说很好 您能否将应用程序中的一些示例数据插入到这个玩具代码中,看看它是否按预期运行?如果是这样,那么问题就出在代码的其他地方
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
子句为true,即使我添加条件tr.RecSupplierInvoiceNumber='00111807',它也不会过滤数据。这些数据是来自缓存的吗?不,这不应该发生(我打赌这不会真的发生)。没有其他条件吗?这就是全部代码吗?@PraveenSingh-我们都是志愿者。当有人(Lamak)向你求助时,没有人会因为帮助你而得到报酬,应该回复。发布两个临时表的完整查询示例数据和输入的预期结果这与我尝试做的相同,也与预期的输出相同。即使是我,我的高级开发人员也不明白为什么where子句不起作用。@PraveenSingh我真诚地怀疑你。在这个问题上我已经问过好几次了,这是否是全部代码,而你拒绝了answer@PraveenSingh这意味着在代码的其他地方,有其他东西正在插入到#tmpRecDistData2中。你能在剩下的代码中搜索表的其他引用吗?对不起@Lamak,我将提供更多可能的代码。
RecUPC RecSupplierInvoiceNumber Foobar DistUPC DistSupplierInvoiceNumber Foobar
-------------------- ------------------------ -------------------- -------------------- ------------------------- --------------------
BBB 30 RecA BBB 30 DistA