这是Oracle中新的通用模式哪里存在(选择NULL FROM…)?


8

多年前,写

where exists (Select * from some_table where some_condition)

去年,我注意到许多t-sql脚本切换为使用数字1而不是星号

where exists (Select 1 from some_table where some_condition)

就这样,我看到了这个Oracle示例

WHERE EXISTS (SELECT NULL FROM ...

这是Oracle的常见模式吗?以及使用此类功能的性能参数。


2
SO对此进行了讨论。 stackoverflow.com/questions/424212/...
利Riffel

Answers:


6

简短的回答:我希望不会!

SELECT 1由于数据库引擎已经发展到足以识别出您实际上并不需要行,而您只是想知道行是否存在,因此即使是惯用语也可能无法使用。我研究了SQL 2005中的执行计划,并且通常将这些计划重写为联接,即使在SELECT *使用时也是如此。


5

在Oracle中,性能无关紧要。您甚至可以在其中放置1/0,并且该语句不会返回除以零的错误,因为该表达式未求值。


1
是否需要关闭此流程以支持依赖SO问题?这是“将SO迁移到dba.SE”之一吗?
jcolebrand
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.