Sql 如何获取所有级别的值都为250的子\u id
我想要C作为答案。如何获取级别num的所有值均为250的子id?编辑:针对Sql 如何获取所有级别的值都为250的子\u id,sql,sql-server,Sql,Sql Server,我想要C作为答案。如何获取级别num的所有值均为250的子id?编辑:针对SQL Server进行了更正(感谢一匹没有名字的马) 除了,您必须使用。 第一个查询将为您提供A,B,C,第二个查询将为您提供A,B除外,将仅为您提供C CHILD_NAME LEVEL_NUM A 4 A 5 A 250 ----------------------- B 5 B 250
SQL Server
进行了更正(感谢一匹没有名字的马
)
除了,您必须使用。
第一个查询将为您提供A
,B
,C
,第二个查询将为您提供A
,B
<代码>除
外,将仅为您提供C
CHILD_NAME LEVEL_NUM
A 4
A 5
A 250
-----------------------
B 5
B 250
B 250
------------------------
C 250
C 250
C 250
从表中选择子项名称
除了
从级别为250的表中选择子项名称
您可以将分组与HAVING
子句一起使用:
select CHILD_NAME from table
except
select CHILD_NAME from table where LEVEL_NUM <> 250
选择子项名称
从mytable
按子对象名称分组
有计数(当等级数为250时,则1结束)=0
如果
LEVEL_NUM
是NOT NULL
列,则上述查询有效。欢迎这样做,在提出问题时请更具体一点:您尝试了什么,您期望什么,等等。查看您使用的是哪种DBMS?为什么是“C”您的答案是什么?C是使用microsoft SQL Server时其所有级别数值均为250的子id现在我们知道它是SQL Server,您需要使用except
而不是减号(减号是Oracle对except
的非标准关键字)而distinct
实际上是不必要的除了(或减去)操作符将自动执行此操作anyway@a_horse_with_no_name谢谢你指点。我认为减号是ansi
标准。另外,我无法让sql server正常工作,所以请告诉我这看起来是否正常。谢谢。谢谢你的回答,但它不起作用。它给了我那些子ID,它们的一些level_num值不是250。我想要一个所有级别数值都是250的子id,它也给了我A和B。A和B的值中有一个是250,请尝试在子名称之前使用distinct
,然后再试一次。我无法测试该查询。@vidhi_shah此查询工作正常。正如Utasv所说,第一个查询将返回所有子_名称,第二个查询将返回至少有一行且级别_NUM不等于250的所有子_名称。在您的情况下,第一个查询结果将是(A,A,A,B,B,C,C),第二个查询结果将是(A,A,B)。使用except只能得到C。如果您只需要第一次和第二次查询的不同结果,请在子项名称前添加不同的关键字
SELECT CHILD_NAME
FROM mytable
GROUP BY CHILD_NAME
HAVING COUNT(CASE WHEN LEVEL_NUM <> 250 THEN 1 END) = 0