0

数据库记录

我在下面有一个表格,其中每个 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 之外,我从上面的查询中获得的数据表,这些数据没有被检索到。我也想要那些突出显示的记录。

新表

4

2 回答 2

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
              )

在查询中,因为我们正在检查 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 
于 2013-04-06T06:35:33.333 回答
1

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

于 2013-04-06T01:47:26.387 回答