|
|
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые форумчане! Прошу не судить строго, если задаю глупые вопросы, но я начинающий, поэтому у меня их много и я много чего не умею. Надеюсь на Вашу помощь. Есть запрос: SELECT a.C_1, b.C_10 FROM a, b WHERE a.C_1 like '406%' and (a.C_2=b.C_2) AND (b.C_1 >= TO_DATE('30.06.2016', 'DD/MM/YYYY') and b.C_1 < TO_DATE('30/06/2016', 'DD/MM/YYYY') + 1) and b.id=(select max(b.id) FROM a, b WHERE a.C_1 like '406%' and (a.C_2=b.C_2) AND (b.C_1 >= TO_DATE('30.06.2016', 'DD/MM/YYYY') and b.C_1 < TO_DATE('30/06/2016', 'DD/MM/YYYY') + 1)) Грубо говоря первым селектом я получаю много строк, а подзапросом я выбираю максимальный номер строки чтобы выбирать по каждому параметру не все строки, а только те, у которых номер максимальный. Естественно условий больше и много строк. Поэтому запрос уходит надолго и зависает. Подсказали, что можно воспользоваться курсором, а именно переписать в такую конструкцию: DECLARE Var1 NUMBER; Var2 VARCHAR2(1000); BEGIN FOR e IN (select * from table…) LOOP Var1:=e.field1; Var2:=e.field2; END LOOP; END; Прошу Вашей помощи, поскольку не совсем понимаю, что и куда пихать. Заранее большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 10:57 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
graph91, b.id уникально? ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:56 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
stax.., Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 17:53 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
graph91, не могу врубится в логику запроса подзапрос с мах вернет одно число мах(ид) (тоесть с b берем одну строку) так тоже долго? select * from ( SELECT a.C_1, b.C_10 ,RANK() OVER (ORDER BY b.id DESC) r FROM a, b WHERE a.C_1 like '406%' and (a.C_2=b.C_2) AND (b.C_1 >= TO_DATE('30.06.2016', 'DD/MM/YYYY') and b.C_1 < TO_DATE('30/06/2016', 'DD/MM/YYYY') + 1) ) WHERE r=1; ps мож переписать сам запрос уйти от b.id=(select max(b.id) ps на счет FOR e IN (select * from table…) а так понимаю предлагают добавить order by, проветчить с мах и exit c цикла stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 15:47 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
1. может как-то так? Код: plsql 1. 2. 3. 4. 5. 6. 2. Но скорее всего, надо смотреть план 3. Возможно, какая-то большая обработка и про курсор упомянули, чтобы обработку вести по частям? Тогда например посмотреть условие по rownum, разбивку на диапазоны по rowid и тп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 17:14 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
Ну и индексы по a.C_1 и по b.C_1 должны бы быть наверно ) При чем желательно имхо индекс a(c_1, c_2) и индекс b(c_2, c_1) Если запрос строится от таблицы "a". Если от таблицы "b", то возможно индекс a(c_2, c_1) и индекс b(c_1, c_2) Как вариант, попробовать use_nl для этих a и b ) (поэтому тоже могли упомянуть цикл) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 17:21 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
Avotge, запрос может возвращать несколько строк із а ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 17:32 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
stax.., точно, сори. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 17:39 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
graph91на счет FOR e IN (select * from table…) а так понимаю предлагают добавить order by, проветчить с мах и exit c цикла Возможно, хотят, чтобы сразу достал максимальные Id cгруппировав по чему-либо (чему это вам виднее), а потом уже в цикле брать эти id и подставлять во внешний запрос. Надо или уточнять или решать с этим запросом, план, индексы и тд ) А может так? ) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 17:56 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
graph91задаю глупые вопросыне майся дурью, от незнания sql незнание plsql не спасает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 18:01 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
Avotge, ... order by b.id DESC =1 ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 18:06 |
|
||
|
Помогите переписать запрос в конструкцию.
|
|||
|---|---|---|---|
|
#18+
stax..., точно, проще, спасибо ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 18:35 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39330145&tid=1887194]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 200ms |
| total: | 476ms |

| 0 / 0 |
