我正在寻找一个简单场景的解决方案。我需要检查表中是否存在某个值,如果存在我需要 Y
否则N
我可以通过两种方式做到这一点,要么从数据库获取行数,并用 java 编写逻辑,要么使用 DECODE(COUNT(*),0,'N','Y')
哪个更好?其中一种相对于另一种有什么优势吗?或者更具体地说,使用DECODE()
有什么缺点吗?而不是用 Java 来做?
我的数据库是DB2。
最佳答案
您应该使用存在
。我倾向于这样做:
select (case when exists (select 1 from . . . .)
then 'Y' else 'N'
end) as flag
from sysibm.sysdummy1;
您想要使用exists
的原因是因为它更快。当您使用count(*)
时,SQL引擎必须处理所有(适当的)数据才能获取计数。使用exists
,它可以停在第一个。
比起 decode()
更喜欢 case
的原因是前者是 ANSI 标准 SQL,基本上在所有数据库中都可用。
关于java - SQL 中的解码与 Java 中的 If...Else 的解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42280117/