Преобразование больших SQL в несколько меньших SQL в сочетании с UNION ALL - PullRequest
0 голосов
/ 07 января 2020

У меня есть образец 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 (где сохраняется исходный лог c ).

Желаемый результат:

(
  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 условий И / ИЛИ, он не выполняется. Одним из решений является сокращение условий через UNION. https://support.treasuredata.com/hc/en-us/articles/360001457447-Presto-Query-FAQs

Может ли это быть достигнуто программно с помощью SQL библиотек синтаксического анализатора?

1 Ответ

1 голос
/ 07 января 2020

Используйте in и not between

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