|
|
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Формулировка проста: написать запрос эквивалентный Код: plsql 1. , но без использования union (и любых других операций над множествами) и ansi. Уровень 1. Можно использовать (native) outer joins. Уровень 2. Можно использовать только inner joins. Ясное дело, чем меньше сканируются таблицы (в идеале по разу каждая), тем лучше. Данные для тестирования Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Я на 100% уверен, что подобное упражнение не ново, но быстро нагуглить не удалось. Для обоих случаев мои запросы работают на 8.1.7.4, но не вижу причин, чтоб они не работали на 8, 7 или даже 6-й версии. PS. На магию данных завязываться не стоит. Подход должен работать для любых дублей и ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 13:50 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, извини, не понял зачем такие ограничения... задачу по твоим условиям я не решал. смысла не вижу так извращаться. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 14:48 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Vintdbms_photoshop, извини, не понял зачем такие ограничения... задачу по твоим условиям я не решал. смысла не вижу так извращаться. Код: 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. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Впрочем, аналог твоего был ответом на уровень 1. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 15:16 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, класический вариант на 6 лямах записей дает 15 сек. мой 12. твой 5-7. с флашем лень замерять. классический никогда не использовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 15:38 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Еще для уровня 1 можно решить за один проход каждой из таблиц, но при условии, что ключи уникальны . Код: plaintext 1. 2. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 15:41 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Уточнение для уровня 2. Можно предлагать как варианты работающие с уникальными ключами, так и с любыми ключами. Для тестирования произвольного случая, к исходным данным можно добавить. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 15:49 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Ну чо, идеи есть? Подожду до след недели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 18:41 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopНу чо, идеи есть?Не хотелось бы тебя расстраивать, но ты слегка оторван от жизни... P.S. И смотри там, не подавись сигаретой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 08:38 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopНу чо, идеи есть? Подожду до след недели. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 10:15 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
ORA__SQL, магия данных Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 10:50 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopЕще для уровня 1 можно решить за один проход каждой из таблиц, но при условии, что ключи уникальны . Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 11:28 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
andreymx, авторбез использования union (и любых других операций над множествами) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 14:25 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
union all detectedandreymx, авторбез использования union (и любых других операций над множествами)я могу убрать юнион и насвинячить прочей хрени, но это решение будет явно хуже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 15:38 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Без union, left join (зато работает) WITH t1 AS (SELECT 0 key, 'OO' VALUE FROM dual UNION ALL SELECT 0 key, 'A1' VALUE FROM dual UNION ALL SELECT 1 key, 'B1' VALUE FROM dual UNION ALL SELECT 2 key, 'C1' VALUE FROM dual UNION ALL SELECT 3 key, 'D1' VALUE FROM dual UNION ALL SELECT 4 key, 'E1' VALUE FROM dual), t2 AS (SELECT 0 key, 'A2' VALUE FROM dual UNION ALL SELECT 0 key, 'Z2' VALUE FROM dual UNION ALL SELECT 1 key, 'B2' VALUE FROM dual UNION ALL SELECT 5 key, 'F2' VALUE FROM dual UNION ALL SELECT 10 key, 'X2' VALUE FROM dual) , t3 as ( select p1.* , (select count(1) from t2 p2 where p2.key = p1.key and rownum = 1) p_exist from t1 p1 ) , t4 as ( select p1.* , (select count(1) from t1 p2 where p2.key = p1.key and rownum = 1) p_exist from t2 p1 ) select distinct case when pp1.p_exist = 1 and pp2.p_exist = 1 then pp1.key when pp1.p_exist = 1 and pp2.p_exist = 0 then pp2.key else pp1.key end key , case when pp1.p_exist = 1 and pp2.p_exist = 1 then pp1.value when pp1.p_exist = 1 and pp2.p_exist = 0 then null else pp1.value end value_1 , case when pp1.p_exist = 1 and pp2.p_exist = 1 then pp2.value when pp1.p_exist = 1 and pp2.p_exist = 0 then pp2.value else null end value_2 from t3 pp1 , t4 pp2 where (pp1.key = pp2.key and pp1.p_exist = 1 and pp2.p_exist = 1) or (pp1.p_exist = 0) or (pp2.p_exist = 0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 16:35 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Plohoy, магия данных, как и у ORA__SQL Если один из наборов пуст, возвращает пустой результат, в то время, как full join вернет другой набор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 16:46 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
union all detectedandreymx, авторбез использования union (и любых других операций над множествами)я могу убрать юнион и насвинячить прочей хрени, но это решение будет явно хуже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 16:47 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Похоже, сайт никогда не починят - чтобы хождение по истории не создавало повторных ответов в теме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 16:48 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Уровень 1: Код: 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.12.2016, 17:57 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 18:14 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
не глядя другие варианты: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 18:23 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
а ежели кей - строка? а ежели кей - от -триллиона до плюс триллиона? и сканировать таблицы предлагали один раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 18:41 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
фикс для пустых наборов: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 18:49 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
уровень 2 - на иннер джойнах Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 19:06 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Elicdbms_photoshopНу чо, идеи есть?Не хотелось бы тебя расстраивать, но ты слегка оторван от жизниСоединения, работа с наборами данных и реляционная алгебра уже не в тренде? А что сейчас модно? NoSQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 19:06 |
|
||
|
Пятнияная задачка: full equi join.
|
|||
|---|---|---|---|
|
#18+
Это не фулл джойнORA__SQL, магия данных Код: plsql 1. 2. Признаться в моей заготовке тоже не был учтен случай пустоты одного из наборов. Если ключ уникален Код: 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. Без учета уникальностиПодход аналогичный ORA__SQL, вместо 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. Всего одно внутреннее соединение Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 19:12 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=182&tid=1886689]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 386ms |

| 0 / 0 |
