Mysql 如何根据条件检索所有记录
我在下面有一个表格,每个N_IDi.e 43、54、32、46和24通常有3条记录。但由于某些原因,N_ID 21和39只有一个记录 要求:通过排除C_类型来查询所有记录!=2,然后状态应为1 使用的查询:Mysql 如何根据条件检索所有记录,mysql,sql,sql-server,sql-server-2008,Mysql,Sql,Sql Server,Sql Server 2008,我在下面有一个表格,每个N_IDi.e 43、54、32、46和24通常有3条记录。但由于某些原因,N_ID 21和39只有一个记录 要求:通过排除C_类型来查询所有记录!=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
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之外,这些都没有被检索到。我也想要那些突出显示的记录
如果删除EXISTS查询中的HAVING countB.Status>1,会发生什么情况?这将过滤掉根据GROUP BY分组时导致空状态的记录。我认为它没有任何作用,因为小组已经这样做了 我不明白这个计划的目的
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将永远存在
因此,您可以避免这个exists条件,只需将查询编写为
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
您确定显示的输出是针对所显示的查询的吗?它如何显示除1以外的其他状态?第一个查询有一个筛选器和一个。Status=1@Mandar实际上正在比较NetworkElementID应该相同的同一个表。@Michael Harmon是的,我只获取Status=1的所有记录,不包括Status=2和Status=4。添加了一个最新的表,其中我没有获取N_ID=21和391的记录。现在如何更改查询以获得该结果?如果在EXISTS查询中删除HAVING countB.Status>1,会发生什么情况?这将过滤掉根据GROUP BY分组时导致空状态的记录。我认为它没有任何作用,因为GROUP BY已经这样做了。->如果我们在上面的场景中使用它,您的查询将以不同的方式运行。例如,请参考我在上面更新的新表。如果我在下面的查询中删除countB.Status>1,请选择a.N\u ID、a.C\u类型、a.C\u文件类型,A.表A中的状态,其中A.Config_Type!=2和A.状态=1且存在从表B中选择1,其中A.N_ID=B.N_ID按B.N_ID、B.C_类型、B.状态分组,然后突出显示记录,即43和46也作为上述查询的一部分检索。理想情况下,我不需要这些记录,因为我的条件应该满足,状态值应该是1,并且总是1。您可以看到示例记录,如54、32、21、39、24。请告诉我在这种情况下如何更改查询。