可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18

CASE与DISTINCT FROM到DECODE

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

当搜索到的 CASE 表达式 包含 DISTINCT 谓词,并且这些谓词始终共享相同的操作数时,该表达式可能会被更短的 DECODE 函数 替换

使用 Settings.transformPatternsCaseDistinctToDecode,可以实现以下转换

-- With Settings.transformPatternsCaseDistinctToDecode active, this:
SELECT
  CASE WHEN a IS NOT DISTINCT FROM b THEN 1 END,
  CASE WHEN a IS NOT DISTINCT FROM b THEN 1 ELSE 2 END,
  CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 END,
  CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 ELSE 3 END
FROM tab;

-- ... is transformed into the equivalent expression:
SELECT
  DECODE(a, b, 1),         -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 END,
  DECODE(a, b, 1, 2),      -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 ELSE 2 END,
  DECODE(a, b, 1, c, 2),   -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 END,
  DECODE(a, b, 1, c, 2, 3) -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 ELSE 3 END,
FROM tab;

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo