SQL:选择一个比较?例如,布尔结果?

时间:2014-03-26 14:47:53

标签: sql

我想知道在SQL中是否可以使用这样的东西:

select (
  (select count(*) from T) = (select count(*) from T t where t.something = thing)
)

如果可能的话,这可能离实际的SQL很远,我不经常写数据库请求。

如何通过单个请求获得比较结果?基本上,如果我没有时间,我只会提出两个请求并用Java比较结果(boooooo !!我知道)。

2 个答案:

答案 0 :(得分:2)

虽然您的查询应该有效,但以下情况可能更快,因为只需要一个查询

select total_count = thing_count
from (
   select count(*) as total_count,
          sum(case when something = 42 then 1 end) as thing_count
   from t
) t

以上是ANSI SQL,应该适用于任何支持真实布尔类型的DBMS。在Oracle中,您需要在外部选择中使用表达式:

select case when total_count = thing_count then 1 else 0 end
from (
   select count(*) as total_count,
          sum(case when something = 42 then 1 end) as thing_count
   from t
) t

答案 1 :(得分:0)

我会写这样的查询:

SELECT (CASE WHEN (select count(*) from T) = (select count(*) from T t where t.something = thing) THEN 1 ELSE 0 END)

但是,如果第一个T与第二个T相同,那么您实际要检查的是,是否有任何记录t.something <> thing ..对吗?

在这种情况下,您可以这样做:

SELECT (CASE WHEN EXISTS (select * from T t where t.something != thing) THEN 1 ELSE 0 END)