【问题标题】:T-SQL WHERE NOT EXISTS - inconsistent resultsT-SQL WHERE NOT EXISTS - 结果不一致
【发布时间】:2018-11-15 00:36:15
【问题描述】:

我有一个问题,即选择了一些带有 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' 

【问题讨论】:

  • 您的查询在我看来没问题。向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example 尝试在rextester.com 中创建样本
  • 我们无法在没有基础数据的情况下验证您的查询,谁知道它是否按预期工作?只有你!
  • 这通常是由于不一致的数据、最常见的空白、有时是控制字符或只是大小写问题(例如'HIS''HIS '' HIS''his')。
  • @ThorstenKettner:至少尾随空格不会在 SQL Server 中导致此问题(根据标准 SQL 忽略尾随空格)
  • 您需要找到一个“应该”被选中但没有被选中的示例,然后找出 SELECT 中的哪个子句是错误的 - 还是 JOIN 失败了?我不会只是进行更改以查看它是否会“消失”

标签: sql sql-server tsql not-exists


【解决方案1】:

如果您查看 varbinary,您可能会发现差异

SELECT 'HISS', CAST('HISS' AS VARBINARY(4))

【讨论】:

    【解决方案2】:

    一种可能性是并非所有'HISS's 都是相同的。也许空间是罪魁祸首。您可以尝试以下查询:

    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';
    

    一旦你了解了罪魁祸首,你就可以考虑如何解决问题。

    【讨论】:

      【解决方案3】:

      我在这里可能是错的,尤其是没有示例数据并且我们可以看到 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'
      

      【讨论】:

      • 这不可能。这只会删除带有code &lt;&gt; hiss 的文档,如果有&lt;&gt; hiss,他想删除所有文档。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 2013-04-17
      • 1970-01-01
      • 2013-11-18
      • 2021-05-29
      • 2022-01-03
      • 2014-01-07
      相关资源
      最近更新 更多