【发布时间】: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