如何根据条件检索所有记录

时间:2013-04-06 01:06:03

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

DATABASE RECORDS

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

要求:通过排除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除外,这些数据未被检索。我也想要那些突出显示的记录。

NEW TABLE

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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