У меня есть огромный запрос, как это:Альтернатива нескольким контатам в предложении WHERE?
SELECT 'Tipification', COUNT(*) TOTAL, to_char(INITDATE,'YYYY-MM-DD')
FROM (
SELECT (TYPE || ' \ ' || SUBTYPE || ' \ ' || PROBLEM) Triplet, INITDATE
FROM TABLE
WHERE USER IS NOT null
AND (INITDATE >= TO_DATE('2016-12-01 00:00', 'YYYY-MM-DD HH24:MI:SS'))
AND (INITDATE <= TO_DATE('2016-12-31 23:59', 'YYYY-MM-DD HH24:MI:SS'))
AND ((TYPE || ' \ ' || SUBTYPE || ' \ ' || PROBLEM) = 'aaa \ bbb \ ccc'
OR (TYPE || ' \ ' || SUBTYPE || ' \ ' || PROBLEM) = 'aaa \ bbb \ ddd'
OR (TYPE || ' \ ' || SUBTYPE || ' \ ' || PROBLEM) = 'xxx \ yyy \ zzz'
OR (TYPE || ' \ ' || SUBTYPE || ' \ ' || PROBLEM) = 'qqq \ www \ eee'
... etc ...
)
GROUP BY to_char(INITDATE,'YYYY-MM-DD')
Где перейти к более 300 строк сцеплений из этого: (TYPE || ' \ ' || SUBTYPE || ' \ ' || PROBLEM) = '... \ ... \ ...'
.
Выполнение этого запроса, я получаю некоторые дампы ядра, поскольку это слишком дорого для выполнения БД.
Есть ли альтернативный способ выполнения такого запроса без того, что у БД заканчивается память?
Почему бы не выполнить конкатенацию во встроенном представлении или CTE вместо повторения? Или используйте 'in' для сравнения отдельных столбцов вместо просмотра конкатенированных значений? (Кажется странным, чтобы получить ошибку памяти от этого, но предположительно вы исключили другие причины и имели небольшую цель памяти?) –
Будет ли «и введите (список типов) или подтип в (список подтипов) или проблему в (список проблем) 'логически звучат? –
'AND ((TYPE || '\' || SUBTYPE || '\' PROBLEM) IN ('aaa \ bbb \ ccc', 'aaa \ bbb \ ddd', 'xxx \ yyy \ zzz', ' qqq \ www \ eee ') '? – TheBakker