我在下面有一个表格,其中每个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除外,这些数据未被检索。我也想要那些突出显示的记录。
答案 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