【问题标题】:SQL query filter a row with a specific combination onlySQL 查询仅过滤具有特定组合的行
【发布时间】:2019-09-15 22:39:39
【问题描述】:

我正在尝试查询具有特定条件的表,我不想查询 Reference Category 为 Production 且 Issue 为 Sold 的行。

在上表中,我只想要第 1,2 和 4 行 - 我如何进行这样的查询。如果我这样做 WHERE ReferenceCategory = 'Production line' AND Issue = 'Sold',它也会带走第 4 行。

http://sqlfiddle.com/#!18/f54f5b/1

【问题讨论】:

标签: sql sql-server database tsql where-clause


【解决方案1】:

我不想查询 Reference Category 为 Production 且 [Issue is] Sold 的行

您可以简单地将条件表述如下:

WHERE NOT (ReferenceCategory = 'Production line ' AND Issue = 'Sold')

在您的 demo on DB Fiddle 中,这将返回记录 1、2、4。

【讨论】:

    【解决方案2】:

    @GMB 回答:

    SELECT *
    FROM TransactionTable
    WHERE NOT (ReferenceCategory = 'Production line' AND Issue = 'Sold')
    

    对于 AX/D365 X++ 用户,在 X++ 查询范围内不允许使用逻辑表达式 NOT(A and B),因此,根据 De' 将 NOT(A and B) 转换为其等效表达式摩根斯法


    NOT(A and B) = (NOT A) OR (NOT B)


    SELECT *
    FROM TransactionTable
    WHERE ReferenceCategory <> 'Production line' OR Issue <> 'Sold'**
    

    【讨论】:

    • “简单 SQL”到底是什么意思? NOT (A AND B) 是非常简单、有效的 SQL。
    • 您应该接受 GMB 的回答 - 而不是添加您自己的答案,这基本上是相同的 - 您确实寻求帮助,而 GMB 确实为您提供了有效的解决方案。
    • NOT 不是正确的函数。这是一个逻辑运算符。
    • @DaleBurrell 感谢您的评论 - 有一种语言叫做 X++,有一种叫做 Query 的对象。在查询中,当你指定查询条件(这些被称为范围)时,不允许使用 NOT(A 和 B)逻辑表达式,因此我不得不依赖它等效的逻辑表达式。
    • @shawnt00 对不起,你没看错,我会纠正这个问题,最终我会删除我的答案,因为它对 SQL 用户来说会变得模棱两可。我的答案在 X++ 的 leiu 中,不允许 NOT(A and B)。有关 DaleBurrell,请参阅上面的我的 cmets。
    猜你喜欢
    • 2020-07-13
    • 2021-06-12
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多