【问题标题】:SQL EXISTS vs. Aggregate IS NOT NULLSQL EXISTS vs. Aggregate IS NOT NULL
【发布时间】:2014-02-17 02:00:18
【问题描述】:

我有两种不同形式的 SQL 条件子句。

使用 EXISTS:

exists (select 1 from [table] where [conditions]) 

使用聚合函数:

(select max(1) from [table] where [conditions]) is not null

[table] 和 [conditions] 在两个语句中是相等的。 这两个子句是否有可能返回不同的结果? 如果不是,哪个查询性能更好? 如果重要的话,有问题的数据库是 IBM DB2 UDB v10。

【问题讨论】:

  • IBM DB2 UDB v10 有 EXPLAIN 语句吗?
  • 没有 DB2 UDB v10 这样的东西。
  • 是的,有解释。但是我没有使用它的特权。

标签: sql database db2 aggregate exists


【解决方案1】:

我没有 DB2 来测试它。但我认为这取决于。以下声明:

select max(1)
from (select 1 as i)t
where i = 2

在 SQL Server (null) 和 MySQL (1) 上产生不同的结果。如果 DB2 返回1,那么语句是不同的。不过,我希望它会返回 null

如果它返回null,那么这两个语句的效果是一样的。但是,max() 语句的性能可能不如existsexists 语句可以在第一个匹配值处停止。

【讨论】:

  • 谢谢戈登·林诺夫。它返回null。再次感谢您对速度的解释。
猜你喜欢
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多