|
exists и order by
|
|||
---|---|---|---|
#18+
Добрый день всем. Задача - выбрать записи из tab1, у которых есть связанные записи в таблице tab2, но только c определенными условиям (condition = 'Y'). При этом нужно брать только последнюю запись из tab2. Делаю так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Вроде по логике все верно. Ошибка: ErrorНедопустимый идентификатор tab1.id То есть, во вложенном запросе s1 не видно tab1. Как переделать запрос, чтоб сохранить логику? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 08:19 |
|
exists и order by
|
|||
---|---|---|---|
#18+
grinn, В общем случае - inline-view не может быть коррелированным. Если нужна корреляция, то или LATERAL, или [CROSS | OUTER] APPLY ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 08:20 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина АннаЕсли нужна корреляция, то или LATERAL, или [CROSS | OUTER] APPLYА если подумать? RTFM FIRST/LAST ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 08:23 |
|
exists и order by
|
|||
---|---|---|---|
#18+
grinn, перепишите запрос через сложенные [not]exists. выбрать из tab1все то, для чего существует в tab2 запись со статусом 'Y' в то время, как для TAB2 не существует записи после той, что со статусом 'Y' ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 08:23 |
|
exists и order by
|
|||
---|---|---|---|
#18+
ElicА если подумать?"А чо тут думать? Прыгать нужно!"(с) старый детский анекдот. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 08:25 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина Анна"А чо тут думать? Прыгать нужно!"(с) старый детский анекдот.Думать нужно всегда. Всё ещё жду адекватного ответа. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 08:28 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина Аннаgrinn, В общем случае - inline-view не может быть коррелированным. Если нужна корреляция, то или LATERAL, или [CROSS | OUTER] APPLY если есть LATERAL,APPLY то версия не древняя в новых версиях запрос отрабатывает (не слетает) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 08:42 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Stax, не то скопипастил Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 08:44 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Stax, Код: 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.
Но тут и LATERAL с APPLY недоступны, конечно же... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 08:51 |
|
exists и order by
|
|||
---|---|---|---|
#18+
grinnЗадача - выбрать записи из tab1, у которых есть связанные записи в таблице tab2, но только c определенными условиям (condition = 'Y'). При этом нужно брать только последнюю запись из tab2. Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 09:08 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина АннаНо тут и LATERAL с APPLY недоступны, конечно же... без латерал для не совсем древних версий Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 09:11 |
|
exists и order by
|
|||
---|---|---|---|
#18+
DshedoogrinnЗадача - выбрать записи из tab1, у которых есть связанные записи в таблице tab2, но только c определенными условиям (condition = 'Y'). При этом нужно брать только последнюю запись из tab2. Код: plsql 1. 2.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 09:17 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Stax, "c определенными условиям (condition = 'Y')" и "брать только последнюю запись из tab2" != "брать только последнюю запись из tab2 c определенными условиям (condition = 'Y')". Но судя по селекту автора, в мой экзист стоит добавить условие по кондишену. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 09:32 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Dshedoo Но судя по селекту автора, в мой экзист стоит добавить условие по кондишену. имхо етого мало .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 09:37 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Staxбез латерал Код: plsql 1. 2.
Осталось чуть-чуть - избавиться от EXISTS ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 09:37 |
|
exists и order by
|
|||
---|---|---|---|
#18+
ElicStaxбез латерал Код: plsql 1. 2.
Осталось чуть-чуть - избавиться от EXISTS імхо с EXISTS 1) красивее 2) понятние 3) если в tab1 много полей, удобнее .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 09:41 |
|
exists и order by
|
|||
---|---|---|---|
#18+
StaxDshedooНо судя по селекту автора, в мой экзист стоит добавить условие по кондишену. имхо етого мало .... stax И даты, конечно же, наоборот. Утро добрым не бывает. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 10:13 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Dshedoo, Код: plsql 1. 2. 3. 4. 5. 6.
нужны дополнительные разяснения автора я по другому понял постановку для 2 (select 2 id,sysdate dat,'N') последнее состояние N, отбрасываем строку зы поясніть результат в Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production я не смог (туплю) .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 10:47 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Stax1) красивееНет. Это как агрегировать аналитикой. Stax2) понятниеНет. Вопрос "Где последнее соостояние равно?" формулируется дословно как Код: plsql 1.
Stax3) если в tab1 много полей, удобнееПро expression list не слышал? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 10:48 |
|
exists и order by
|
|||
---|---|---|---|
#18+
ElicStax1) красивееНет. Это как агрегировать аналитикой. Stax2) понятниеНет. Вопрос "Где последнее соостояние равно?" формулируется дословно как Код: plsql 1.
Stax3) если в tab1 много полей, удобнееПро expression list не слышал? что б о чем-то продолжать, надо увидеть решение без EXISTS ps Про expression list не слышал .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 10:55 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Staxчто б о чем-то продолжать, надо увидеть решение без EXISTSJOIN же на предагрегированный по ID inline-view на базе tab2 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:03 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Stax, ну или куда Elic клонит - агрегитрованный скалярный коррелированный подзапрос с first/last во внутрях и с проверкой во вне на равенство Y ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:04 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Stax, Вообще, учитывая то, что автор пытался в экзист, нам нужно посмотреть последнюю строку из tab2, и если она condition = 'Y', тогда вернуть из tab1. Похоже, что автор не совсем в курсе как формируется rownum. Скорее всего нужен либо мой первый вариант, либо что-нибудь типа: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:05 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Dshedoo, * Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:07 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина АннаStaxчто б о чем-то продолжать, надо увидеть решение без EXISTSJOIN же на предагрегированный по ID inline-view на базе tab2 я ето понимаю (и могу срисовать) где селект чтоб сравнить с exists? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:08 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Dshedoo Код: plsql 1.
Вот и дословно Elicагрегировать аналитикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:18 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина Анна Код: plsql 1.
Но тут и LATERAL с APPLY недоступны, конечно же... Ага, конечно... http://www.fors.ru/upload/magazine/07/http_text/russia_s.malakshinov_distinct_top.html ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:26 |
|
exists и order by
|
|||
---|---|---|---|
#18+
andrey_anonymousАга, конечно...речь "за конфетки из пакетика", без "танцев с бубнами"... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:34 |
|
exists и order by
|
|||
---|---|---|---|
#18+
andrey_anonymous, так-то "при помощи лома и чей-то матери" и не такого наворотить можно. Вы бы хотели на продакте видеть такой код в эвентами? как по мне - то ну его куда подальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:36 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина Аннаandrey_anonymous, так-то "при помощи лома и чей-то матери" и не такого наворотить можно. Вы бы хотели на продакте видеть такой код в эвентами? как по мне - то ну его куда подальше. какой конкретнее код на продакте Вам не нравится? .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:41 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Stax, ответ Андрею, на его предложение юзать LATERAL на древних версиях, череp установку эвента 22829 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:43 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина АннаStax, ответ Андрею, на его предложение юзать LATERAL на древних версиях, череp установку эвента 22829 спасибо (я не понял про эвент 22829) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:48 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина АннаStax, ответ Андрею, на его предложение юзать LATERAL на древних версиях, череp установку эвента 22829 1. Чтите внимательнее. Там не только 22829. 2. Продуктовый сервер на 11.2.0.2 по состоянию на сегодня - не тот случай, когда следует быть особо разборчивым. Система либо просится под замену, либо на этот конкретный под всем плевать через губу. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 11:51 |
|
exists и order by
|
|||
---|---|---|---|
#18+
andrey_anonymous1. Чтите внимательнее. Там не только 22829. 2. Продуктовый сервер на 11.2.0.2 по состоянию на сегодня - не тот случай, когда следует быть особо разборчивым. Система либо просится под замену, либо на этот конкретный под всем плевать через губу. 1) На досуге - обязательно ознакомлюсь. 2) Это "игрушка" для демонстрации/проверки ответов на sql.ru. В реальной жизни Oracle остался далеко за рамками моего профессионального горизонта... ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 12:03 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Щукина Аннану или куда Elic клонит - агрегитрованный скалярный коррелированный подзапрос Мне кажется, Elic клонит в эту сторону - если я не прав, пусть он первый бросит в меня камень! Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Хотя мне на dual-ах не нравится exists-шаг в плане (реальные таблицы подкладывать лень): Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
Поэтому, если план на реальных данных будет смущать, я бы еще рассмотрел предложенный вариант: Щукина АннаJOIN же на предагрегированный по ID inline-view на базе tab2 Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 12:24 |
|
exists и order by
|
|||
---|---|---|---|
#18+
AmKad, если посмотреть внимательно на расстановку скобочек и момент применения условия = Y, то нет - неправильно вам кажется... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 12:28 |
|
exists и order by
|
|||
---|---|---|---|
#18+
AmKad, но право кидать камень, конечно же, остается за Elic-ом ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 12:30 |
|
exists и order by
|
|||
---|---|---|---|
#18+
AmKadЩукина Аннану или куда Elic клонит - агрегитрованный скалярный коррелированный подзапросАнна меня правильно поняла. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 12:30 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Медленно, еле-еле выползаю из под камней ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 12:34 |
|
exists и order by
|
|||
---|---|---|---|
#18+
AmKad Мне кажется, Elic клонит в эту сторону - если я не прав, пусть он первый бросит в меня камень! надо у grinn уточнить условие если судить по его селекту (считать селект правильным ), то я неверно понял задачу, и мое решение 21910289 ошибочно зы не люблю джоин, мне exists более понятен (хотя допускаю, что exists может быть менее ефективным) .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 12:58 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Staxнужны дополнительные разъяснения автора Прошу прощения, не совсем точно сформулировал задачу. Если в tab2 самая свежая запись имеет tab2.condition = 'Y', то запись из tab1 попадает в набор, иначе - нет. Сделал так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Всем большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 12:58 |
|
exists и order by
|
|||
---|---|---|---|
#18+
grinnStaxнужны дополнительные разъяснения автора Прошу прощения, не совсем точно сформулировал задачу. Если в tab2 самая свежая запись имеет tab2.condition = 'Y', то запись из tab1 попадает в набор, иначе - нет. Сделал так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Всем большое спасибо!давно не доводилось видеть старообрядного синтаксиса джойнов... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 13:05 |
|
exists и order by
|
|||
---|---|---|---|
#18+
grinnЕсли в tab2 самая свежая запись имеет tab2.condition = 'Y', то запись из tab1 попадает в набор, иначе - нет. Всем большое спасибо! оооо, именно так я и понял задачку Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
неверен ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 13:06 |
|
exists и order by
|
|||
---|---|---|---|
#18+
Stax Код: plsql 1. 2.
неверен Вы имеете в виду, что сначала выполнится условие s1.condition = 'Y', а уже затем ROWNUM = 1? Да, тогда запрос неверен. Спасибо, что акцентировали. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 13:20 |
|
exists и order by
|
|||
---|---|---|---|
#18+
grinnВы имеете в виду, что сначала выполнится условие s1.condition = 'Y', а уже затем ROWNUM = 1? Да, тогда запрос неверен. Спасибо, что акцентировали. да надо еще одін уровень вложенности в новых версиях отработает ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2019, 13:28 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1882384]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 182ms |
0 / 0 |