|
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 |
|
|
start [/forum/topic.php?fid=52&msg=39827518&tid=1882384]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 149ms |
0 / 0 |