|
Оператор (+) и классические левые объединения..... небольшие траблы
|
|||
---|---|---|---|
#18+
Приветсвую Всех! вы уж простите мне мою глупость, но я замкнул на одном запросе, и никак не могу понять в чем дело. Итак : Существуют таблицы a,b и c. Необходимо сделать a (inner join c) left join b БД большая и при запросе за определенный период должно вылезти 2700 записи из а причем 1000 из них должны объедениться с пустотой (несущствующими записями из b) Пишем запрос на Оракуле: Код: plaintext 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.
результат - 1700 строк - явное проглатывание некоторых строк таблицы а которых нет в b пишем другой запрос : Код: plaintext 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.
Все работает как надо, результат - 2700 записи Но при этом жутко тормозит. В чем трабл? Почему в первом случае не получается ...... Может я чего то недопонимаю ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2002, 16:30 |
|
Оператор (+) и классические левые объединения..... небольшие траблы
|
|||
---|---|---|---|
#18+
Для простого понимания символа "+" в запросах, можно использовать слово "расширение". То есть "+" используется для расширения той таблицы в которой нет данных, которые есть в другой. При расширении значения столбцов принимают значения "NULL". В твоём примере:"...несущствующими записями из b..." - ты должен расширять соответственно алиас b, то есть b.CB_ACCT_NO(+) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2002, 16:37 |
|
Оператор (+) и классические левые объединения..... небольшие траблы
|
|||
---|---|---|---|
#18+
Сразу оговорюсь SELECT * from a,b where a.ROW_KEY(+)=b.FOREIGN_KEY также не объединяет и работает как inner join ...... даже без с ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2002, 16:38 |
|
Оператор (+) и классические левые объединения..... небольшие траблы
|
|||
---|---|---|---|
#18+
еще раз: базовое множество - a, расширение множества a - множество b мне нужно в классическом виде a left join b а она почему то всегда работает как a inner join b ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2002, 16:41 |
|
Оператор (+) и классические левые объединения..... небольшие траблы
|
|||
---|---|---|---|
#18+
Похоже тебя и вправду замкнуло. Ты писал "из них должны объедениться с пустотой (несущствующими записями из b) "??? Обьясняю еще раз, для того что-бы алиас b вернул еще 1000 записей с пустотой, как ты сказал., правильнее говоря с NULL - необходимо знак (+) поставить для алиаса b, т.е : WHERE a.CCY=c.CCY AND a.VALUE_DATE=c.EFFECTIVE_DATE AND a.REFERENCE =b.CB_ACCT_NO(+) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2002, 16:49 |
|
|
start [/forum/topic.php?fid=52&msg=32062414&tid=1992854]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 140ms |
0 / 0 |