Java 将较大的SQL转换为由UNION ALL组合的多个较小的SQL

Java 将较大的SQL转换为由UNION ALL组合的多个较小的SQL,java,sql,presto,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,这些SQL由UNION组合,所有这些SQL都保留了原

我有一个类似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,这些SQL由UNION组合,所有这些SQL都保留了原始逻辑

期望的结果是

(
  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引擎。 我们发现了一个限制,其中,如果查询很大,并且有1000个和/或以上的条件,那么它将失败。 解决方案之一是通过工会减少条件。

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

在和不在两者之间使用


你为什么要用UNION来做这个?这样做不是个好主意。执行联合查询所需的时间将非常长。我们使用PRESTO DB作为SQL引擎。我们发现了一个限制,其中,如果查询很大,并且有1000个和/或以上的条件,那么它将失败。解决方案之一是通过工会减少条件。上面的查询模拟了我们使用的实际查询,它更为复杂。如何构建示例SQL,即没有UNION ALL的SQL?将DEVOPS、ACCOUNTING等值放在单独的临时数据库中?桌子我想问题更多的是如何自动完成,而不是使用什么构造。OPs查询有超过1000个和/或,所以手动操作会很烦人。对不起,但这不是我要找的。正如我提到的,实际的查询相当复杂。因此,不可能用IN替换
select *
from myTable
where department in ('IT', 'Finance', 'etc')
and not age between 50 and 100