Я использую разработчик sql oracle. У меня есть одно сомнение и одна вещь, с которой у меня проблемы: 1) Мне нужно сделать выбор, который имеет некоторые правила.Улучшить выбор производительности и удобочитаемости
- Этот выбор должен возвращать информацию из таблицы1.
- Таблица2 является «ребенком» из таблицы1.
- Дата от каждой таблицы должна быть от того же месяца/года текущего.
- Идентификатор не должен быть ни в обеих таблицах.
- В конечном возвращении должны быть только данные, которые из таблицы 1 должны быть только теми, что nrtable и nrgroupby находятся в подвыборке, который я сказал.
Если не было ясно, что я сделал одно, это работает, но это глупо, потому что я думаю, что есть способ сделать это, или более эффективным или более читаемым, потому что таким образом мне пришлось rewrit почти те же выберите два раза:
SELECT *
FROM TABLE1
WHERE NRSEQTABLE1 IN
(SELECT DECODE(T1.NRSEQTABLE1,NULL, T2.NRSEQTABLE1, T1.NRSEQTABLE1) AS NRSEQTABLE1
FROM
(SELECT NRSEQTABLE1,
NRNUM2
FROM TABLE1 T1
WHERE TO_CHAR(DTHRTABLE1, 'MM/YYYY') = TO_CHAR(SYSDATE, 'MM/YYYY')
AND IDRULE = 'NO'
) T1
FULL JOIN
(SELECT NRSEQTABLE1,
NRNUM2
FROM TABLE2 T2
WHERE TO_CHAR(DTHRTABLE2, 'MM/YYYY') = TO_CHAR(SYSDATE, 'MM/YYYY')
AND IDRULE = 'NO'
) T2
ON T2.NRSEQTABLE1 = T1.NRSEQTABLE1
AND T2.NRNUM2 = T1.NRNUM2
)
AND NRGROUPBY IN
(SELECT NRGROUPBY
FROM TABLE1
WHERE NRSEQTABLE1 IN
(SELECT DECODE(T1.NRSEQTABLE1,NULL, T2.NRSEQTABLE1, T1.NRSEQTABLE1) AS NRSEQTABLE1
FROM
(SELECT NRSEQTABLE1,
NRNUM2
FROM TABLE1 T1
WHERE TO_CHAR(DTHRTABLE1, 'MM/YYYY') = TO_CHAR(SYSDATE, 'MM/YYYY')
AND IDRULE = 'NO'
) T1
FULL JOIN
(SELECT NRSEQTABLE1,
NRNUM2
FROM TABLE2 T2
WHERE TO_CHAR(DTHRTABLE2, 'MM/YYYY') = TO_CHAR(SYSDATE, 'MM/YYYY')
AND IDRULE = 'NO'
) T2
ON T2.NRSEQTABLE1 = T1.NRSEQTABLE1
AND T2.NRNUM2 = T1.NRNUM2
)
GROUP BY TABLE1.NRGROUPBY
HAVING COUNT(TABLE1.NRSEQTABLE1) > 10
)
ORDER BY NRGROUPBY,
NRSEQTABLE1;
Извините за английский и спасибо за любую помощь
для 'id in (две таблицы)', почему бы не использовать 'union'? –
Использование союза вместо него не всегда лучше, но оно также может быть. В основном это зависит от мощности данных, от избирательности задействованных столбцов и наличия на них полезных индексов. Я также думаю, что первый подзапрос бесполезен, если NRSEQTABLE1 уникален, но подробности об этом отсутствуют. –
Я просто понял, что если OP ищет «COUNT (NRSEQTABLE1)> 10», этот столбец не уникален и что он встречается много раз. Таким образом, первый подзапрос не бесполезен, и использование UNION может быть лучше, если нет индексов в столбце NRSEQTABLE1 для обеих таблиц. –