T-SQL, ГДЕ НЕ СУЩЕСТВУЕТ - противоречивые результаты - PullRequest
0 голосов
/ 05 июня 2018

У меня проблема, когда некоторые заказы с od. [Bin Code] = 'HISS' выбираются, даже если этот запрос, содержащий NOT EXISTS, работает большую часть времени.Может ли кто-нибудь объяснить, как иногда выбираются эти заказы?И как мы можем это исправить?

SELECT *
FROM   [NAV2009].[dbo].[company\$sales line] AS line 
       JOIN [NAV2009].[dbo].[company\$sales header] AS Header 
         ON line.[document no_] = Header.no_ 
WHERE  NOT EXISTS (SELECT * 
                   FROM   [NAV2009].[dbo].[company\$sales line] od 
                   WHERE  line.[document no_] = od.[document no_] 
                          AND od.[bin code] = 'HISS') 
       AND Header.[website code] = 'DEFAULT' 
       AND [general comments] <> 'Picking' 

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Одна возможность состоит в том, что не все 'HISS' одинаковы.Возможно, места являются виновником.Вы можете попробовать выполнить следующие запросы:

select od.[Bin Code]
from [NAV2009].[dbo].[company\$sales line] od 
where od.[Bin Code] like '%H%I%S%S%' and
      od.[Bin Code] <> 'HISS';

Как только вы поймете виновника, вы сможете подумать, как решить проблему.

0 голосов
/ 06 июня 2018

Если вы посмотрите на varbinary, вы, скорее всего, увидите разницу

SELECT 'HISS', CAST('HISS' AS VARBINARY(4))
0 голосов
/ 05 июня 2018

Я могу ошибаться, особенно без примеров данных и того, что мы можем видеть экран OP, но это можно переписать без WHERE NOT EXISTS как

FROM [NAV2009].[dbo].[Company\$Sales Line] AS line
INNER JOIN [NAV2009].[dbo].[company\$Sales Header] AS Header 
        ON  line.[Document No_] = Header.No_
    --to exclude rows where od.[Bin Code] <> 'HISS' then include in JOIN
        AND od.[Bin Code] <> 'HISS'
WHERE Header.[Website Code] <> 'DEFAULT'
AND [General Comments] = 'Picking'
...