我想知道在SQL中是否可以使用这样的东西:
select (
(select count(*) from T) = (select count(*) from T t where t.something = thing)
)
如果可能的话,这可能离实际的SQL很远,我不经常写数据库请求。
如何通过单个请求获得比较结果?基本上,如果我没有时间,我只会提出两个请求并用Java比较结果(boooooo !!我知道)。
答案 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)