|
|
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Довольно распространенная задача, фильтры по входным параметрам (параметры могут быть, а могут и не быть). Т.е. упрощенно, в наличии две таблицы, надо вывести все записи из первой таблицы, в привязке ко второй (параметры), но если во второй записей нет (параметры не заданы), то из первой вывести все записи. Без дин.скл. Обычно что-то типа такого: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. По сути не сильно отличаются по-моему и вроде работает, но что-то не нравится (в первом случае каждый раз проверка t2.cnt, во втором NVL) и ощущение, что можно переписать как-то более изящно что ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 09:48 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
SqlDreamerДовольно распространенная задача, фильтры по входным параметрам (параметры могут быть, а могут и не быть). Т.е. упрощенно, в наличии две таблицы, надо вывести все записи из первой таблицы, в привязке ко второй (параметры), но если во второй записей нет (параметры не заданы), то из первой вывести все записи.Каждый кулик своёболото считает образцом для подражания. SqlDreamerОбычно что-то типа такого:Обычно используют bind-ы. А если приложение недо-, то обычно с этого и начинают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 10:00 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
ElicОбычно используют bind-ы. А если приложение недо-, то обычно с этого и начинают. Чота вы сегодня не с той ноги, сразу болтом обзываетесь ) между тем действительно встречал немало болот, где используют подобный подход. Бинды конечно есть, по ним и достаются данные в table2, здесь упростил, чтобы отразить суть вопроса. То есть данные из table2 достаются по биндам, а далее они являются фильтром для table1, но если в table2 ничего не попало, то из table1 надо достать все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 14:09 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
SqlDreamerТ.е. упрощенно, в наличии две таблицы, надо вывести все записи из первой таблицы, в привязке ко второй (параметры), но если во второй записей нет (параметры не заданы), то из первой вывести все записи. Без дин.скл. LEFT JOIN ?? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 20:25 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
ora601LEFT JOIN ?? :) Типа такого? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Но тогда если в table2 нет записей, то джоин как бы вообще не нужен. Выходит, только дин.скл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 10:26 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. PS: lvl во второй таблице ведь не может быть null? ну или если может, то это не считается "в привязке ко второй" или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2017, 17:49 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
SqlDreamer, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2017, 18:18 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
SqlDreamer, ну извратиться конечно можно =) Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 14:10 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, даже так, точнее: Код: plsql 1. 2. 3. ну в общем мысль понятна ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 14:16 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
MaximaXXLну в общем мысль понятна ...Непонятно только почему ты приплел :param. Если цель решить задачу ТС с одним проходом каждой из таблиц и без всяких аналитических сортировок, то это можно (но не нужно) сделать примерно так Код: plsql 1. В 12с вместо нелепого left join можно было бы использовать lateral/outer apply. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 14:48 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopНепонятно только почему ты приплел :param. ...... В 12с вместо нелепого left join можно было бы использовать lateral/outer apply. ну это я в шар хрустальный глянул и понял что SqlDreamer будет передавать условия во внутреннюю таблицу и если записей нет то выдать все (так и писал) по 12с - мы еще на 11 посему outer join пока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 16:31 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, Вроде ТС довольно четко объяснил, что если t2 пустая, то выдаются все записи t1, иначе фильтруются по t2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 16:40 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
SqlDreamer, Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 16:52 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Неужели всё так просто?, Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 16:53 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
ПардоньтеНеужели всё так просто?, Код: plsql 1. Еще раз для танкистов: если t2 пустая - должны быть возвращены все строки из t1. Неужели так сложно осилить формулировку из одной строки да еще и при наличии решений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 16:59 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, :param - это переменная для условия on (t2.f = значение) Это ни в коем случае не часть аналитической функции т.е. я выделил место где задавать условие, отлаживался я так =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 17:16 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopMaximaXXL, Вроде ТС довольно четко объяснил, что если t2 пустая, то выдаются все записи t1, иначе фильтруются по t2. так и было написано, основной момент был указан что делать dual left Join table2 чтоб в случае пустой table2 после наложения условий была хотя-бы одна строка на выходе, значением которой можно управлять посредством nvl(t2.lvl,значение_для_пустой_таблицы). Но посмотрев в условие и увидев что SqlDreamer подходит null я просто заменил nvl(t2.lvl,значение_для_пустой_таблицы) на t2.lvl. Ваш вариант более предпочтителен в конкретно поставленной задаче, я не спорю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 17:25 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39443479&tid=1886042]: |
0ms |
get settings: |
10ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 349ms |

| 0 / 0 |
