перевести/упростить запрос FB to Oracle
CASE WHEN c.exception_date IS NULL THEN 1 ELSE 0 ENDкак минимум это можно заменить на nvl2(c.exception, 0,1)
SELECT p.id, q.fl
FROM parent p, (SELECT parent_id, DECODE(COUNT(NVL(exception,1 - COUNT(exception0,0,1) AS fl FROM child GROUP BY parent_id) q
WHERE p.id = q.parent_id(+)
ORDER BY p.id
совсем скурился с этим FB 1.5 (там нет возможности подзапросы в FROM писать забыл про джойны о.О
Отличная идея, спасибо!
SELECT p.ID,
(SELECT DECODE(count(*0,0,1)
FROM child c
WHERE c.parent_id = p.ID
AND c.exception IS NULL) AS x
FROM parent p
а в оракле отработает что-нить типа select p.id, (select max(case when exception blah blah end) from child where parent = p.id) from parent ?
By the way: что-то не догоню, чем различается
PLAN (C ORDER FK_PARENT_TO_CHILD)
и
PLAN SORT A INDEX (FK_PARENT_TO_CHILD
что-то в таком роде и написал, с учётом того, что exception это timestamp.
Не совсем понимаю, как тип timestamp влияет на то, что я написал. Неприменим оператор blah blah?
Ну, я же всё сильно упростил, чтобы понятно было. Это же всего лишь небольшая часть крокодила.
count же будет 0, если записей нет совсемЯ оказывается пропустил момент что если записей нет то нужно выводить null. Тогда MAX или MIN.
Оставить комментарий
kill-still
Запрос в фаербёрде:добавляет к таблице parent мнимый столбец с информацией о связанных записях из child
1 - есть незакрытые строки 0 - нет NULL - нет строк вообще. (значения по барабану, главное различать эти три состояния)
Долго извращался, в итоге получился такой монстр:
чую что перемудрил. Может кому не лень глянуть.