【问题标题】:How to retrieve all records based on condition如何根据条件检索所有记录
【发布时间】:2013-03-28 13:49:19
【问题描述】:

我在下面有一个表格,其中每个 N_ID(即 43、54、32、46 和 24)通常有 3 条记录。但由于某种原因,“21 和 39”的 N_ID 只有一条记录。

要求:通过排除 C_Type 查询所有记录! = 2,然后状态应为 1。

使用的查询:

Select A.N_ID, A.C_Type, A.C_File_Type, A.Status 
FROM TABLE A 
where A.Config_Type != 2 
      AND A.Status = 1 
      AND EXISTS (Select 1 
                  from TABLE B 
                  WHERE A.N_ID = B.N_ID Group By B.N_ID, B.C_Type, B.Status 
                  HAVING count(B.Status) > 1
                  )

输出: 除了 C_Type = 2,我正在按预期获取所有记录。

现在的问题是如何更改现有查询以获取 N_ID='21, 39' 的附加记录?因为这些记录没有作为我的查询的一部分检索。

我从上面的查询中获得的数据表,除了记录 N_ID = 21、39,那些没有被检索到。我也想要那些突出显示的记录。

【问题讨论】:

  • 您确定显示的输出是针对显示的查询的吗?它如何显示 1 以外的状态?第一个查询有一个过滤器“AND A.Status = 1”
  • @Mandar 实际上是在比较同一张表,其中 NetworkElementID 应该相同。
  • @Michael Harmon 是的,我只获取状态 =1 的所有记录,不包括状态 = 2 和状态 = 4。
  • 添加了一个最新表,其中没有获取 N_ID = "21" 和 "39"(突出显示的) 的记录。现在如何更改查询以获得它?
  • 如果删除 EXISTS 查询中的“HAVING count(B.Status) > 1”会发生什么?这将过滤掉根据 GROUP BY 分组时导致 NULL 状态的记录。我认为它没有任何作用,因为 GROUP BY 已经这样做了。

标签: mysql sql sql-server sql-server-2008


【解决方案1】:

如果删除 EXISTS 查询中的“HAVING count(B.Status) > 1”会怎样?这将过滤掉根据 GROUP BY 分组时导致 NULL 状态的记录。我认为它没有任何作用,因为 GROUP BY 已经这样做了。

【讨论】:

  • --> 如果我们在上述场景中使用,您的查询将以不同的方式表现(即请参考我在上面更新的新表)
  • 如果我在下面的查询中删除“HAVING count(B.Status) > 1”,请从表 A 中选择 A.N_ID、A.C_Type、A.C_File_Type、A.Status 其中 A.Config_Type ! = 2 AND A.Status = 1 AND EXISTS(从表 B 中选择 1,其中 A.N_ID = B.N_ID Group By B.N_ID, B.C_Type, B.Status )
  • 然后突出显示的记录(即 43 和 46)也作为上述查询的一部分检索。理想情况下,我不需要这些记录,因为我的条件应该满足 (Status value should be 1 and 1 always) 。您可以看到示例记录,例如 54、32、21、39、24。
  • 让我知道在这种情况下如何更改查询。
【解决方案2】:

我无法理解的目的

      AND EXISTS (Select 1 
              from TABLE B 
              WHERE A.N_ID = B.N_ID Group By B.N_ID, B.C_Type, B.Status 
              HAVING count(B.Status) > 1
              )

在查询中,因为我们正在检查 B 中的外部 A 的 N_ID,同一个表的 N_ID 将永远存在。

因此您可以避免这种存在条件,并且可以简单地将查询编写为

    Select A.N_ID, A.C_Type, A.C_File_Type, A.Status 
      FROM TABLE A 
       where A.Config_Type != 2 
        AND A.Status = 1 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多