java - SQL 中的解码与 Java 中的 If...Else 的解码

标签 java sql db2

我正在寻找一个简单场景的解决方案。我需要检查表中是否存在某个值,如果存在我需要 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/

相关文章:

spring - 使用 Spring jdbcTemplate 时的 ConnectionPooling 配置

java - 在 db2 中使用准备好的语句准备的查询失败

sql - 如何使用没有临时表的 SQL 查询为组中的每个元素添加序列号

Mysql:计算 db1.order_tbl、db2.order_tbl、...、dbN.order_tbl 中的订单总数?

sql - 对多列的最大值使用 SQL WHERE 子句

java - 无法使用 Web 服务的二维对象返回值

stored-procedures - DB2 存储过程 : Dynamically Building a Select Statement for cursor

java - Android:如何使用他的电话号码登录用户

java - 在java模式匹配器(正则表达式)中如何迭代每个文本并将其替换为不同的文本

java - 尝试部署 CAS maven 覆盖时抛出异常