Oracle如何比较指定id对应的value值并按规则返回对应结果
Oracle实现方案
你可以通过条件聚合或者子查询两种方式实现需求,两种写法均兼容全版本Oracle:
方式1:单表聚合查询(适合小表场景,无需多次查表)
将不同id对应的行值聚合到同一行做对比,一次扫描即可得到结果:
SELECT CASE -- 对比id=3和id=4的value值 WHEN MAX(CASE WHEN id = 3 THEN value END) = MAX(CASE WHEN id = 4 THEN value END) THEN MAX(CASE WHEN id = 1 THEN value END) -- 相等返回id=1的value ELSE MAX(CASE WHEN id = 2 THEN value END) -- 不等返回id=2的value END AS result FROM 你的实际表名;
方式2:子查询匹配(适合id有索引的大表场景,走索引查询效率更高)
直接通过主键/索引匹配对应id的value做对比:
SELECT CASE WHEN (SELECT value FROM 你的实际表名 WHERE id = 3) = (SELECT value FROM 你的实际表名 WHERE id = 4) THEN (SELECT value FROM 你的实际表名 WHERE id = 1) ELSE (SELECT value FROM 你的实际表名 WHERE id = 2) END AS result FROM DUAL;
你提供的示例数据运行两种语句都会返回yes,符合预期。
内容的提问来源于stack exchange,提问作者Sangathamilan Ravichandran
相关产品推荐
相关产品推荐

