java - 将较大的 SQL 转换为通过 UNION ALL 组合的多个较小的 SQL

标签 java sql presto

我有一个类似 SQL 的示例

SELECT id, age, department
FROM User
WHERE
age < 50 AND id > 100 AND
(
  department = 'IT' OR department = 'DEVOPS' OR department = 'ACCOUNTING' .... more OR conditions on department
) 

我需要将这个SQL转换为多个SQL,并通过UNION ALL组合起来(其中保留原来的逻辑)。

期望的结果是

(
  SELECT id, age, department
  FROM User
  WHERE age < 50 AND id > 100 AND department = 'IT'
)
UNION ALL
(
  SELECT id, age, department
  FROM User
  WHERE age < 50 AND id > 100 AND department = 'DEVOPS'
)
UNION ALL
(
  SELECT id, age, department
  FROM User
  WHERE age < 50 AND id > 100 AND department = 'ACCOUNTING'
)
UNION ALL
....further conditions

位背景

我们使用 PRESTO DB 作为 SQL 引擎。 我们发现 1 个限制,其中如果查询很大且具有超过 1000 个 AND/OR 条件,则查询会失败。 解决方案之一是通过 UNION 减少条件。 https://support.treasuredata.com/hc/en-us/articles/360001457447-Presto-Query-FAQs

这可以通过使用 SQL 解析器库以编程方式实现吗?

最佳答案

使用innot Between

select *
from myTable
where department in ('IT', 'Finance', 'etc')
and not age between 50 and 100

关于java - 将较大的 SQL 转换为通过 UNION ALL 组合的多个较小的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59627939/

相关文章:

sql - 如何使用脚本生成 INTERVAL 1 <day|week|month>?

sql - 在 SQL 中插入缺失值

sql - Presto:将带有/TZ 的时间戳转换为普通时间戳而不转换为 UTC

java - 使用 spring R2DBC 连接 mySQL 服务器版本 8 时出现未知系统变量 'tx_isolation'

java - 为什么我的变量不指向同一个数组?

java - java中检测两个任务是否冲突

java - 使用 Intellij 和 Maven 调试 Java 注释处理器

sql - postgres 中没有 FILTER 的潜在空字段的字符串聚合。

sql - MySQL 存储过程的返回值

c# - 使用 C# for MongoDB 或 Azure Blob 作为数据存储的 Presto