|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
Помогите, пожалуйста, написать иерархический запрос. Условия: имеется таблица сотрудников EMP: ID, NAME имеется таблица отделов, в которых работают сотрудники DEP: ID, NAME Пусть: E1, E2, E3, ... - сотрудники D1, D2, D3, ... - отделы Имеем следующую картину: E1: D1 - сотрудник E1 работает в отделе D1 E2: D1,D2 - сотрудник E2 совмещает работу в отделах D1 и D2 E3: D2,D3 - сотрудник E3 совмещает работу в отделах D2 и D3 E4: D3,D4 - сотрудник E4 совмещает работу в отделах D3 и D4 E5: D3,D5,D6 - сотрудник E5 совмещает работу в отделах D3, D5 и D6 E6: D5 - сотрудник E6 работает в отделе D5 E7: D7 - сотрудник E1 работает в отделе D7 ... Необходимо задав сотрудника, получить список всех сотрудников связанных с ним и друг с другом по отделам, т.е. например по E1 получить E1,E2,E3,E4,E5,E6 по любому из (E1..E6) надо получать E1,E2,E3,E4,E5,E6 а вот по E7 нужно только E7 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 17:53 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
наверное как то нужно с CONNECT BY PRIOR START WITH ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 17:55 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
verter, Данные надо нормализовать а не хранить ввиде CSV. Тут рекурсия: Код: 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.
Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:29 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
verter Имеем следующую картину: E1: D1 - сотрудник E1 работает в отделе D1 E2: D1,D2 - сотрудник E2 совмещает работу в отделах D1 и D2 E3: D2,D3 - сотрудник E3 совмещает работу в отделах D2 и D3 E4: D3,D4 - сотрудник E4 совмещает работу в отделах D3 и D4 E5: D3,D5,D6 - сотрудник E5 совмещает работу в отделах D3, D5 и D6 E6: D5 - сотрудник E6 работает в отделе D5 E7: D7 - сотрудник E1 работает в отделе D7 ... Это реализовано в виде таблицы связей многие-ко-многим? EMPDEPTcommentE1 D1 сотрудник E1 работает в отделе D1E2 D1 сотрудник E2 совмещает работу в отделах D1 и D2E2 D2 сотрудник E2 совмещает работу в отделах D1 и D2E3 D2 сотрудник E3 совмещает работу в отделах D2 и D3E3 D3 сотрудник E3 совмещает работу в отделах D2 и D3E4 D3 сотрудник E4 совмещает работу в отделах D3 и D4E4 D4 сотрудник E4 совмещает работу в отделах D3 и D4E5 D3 сотрудник E5 совмещает работу в отделах D3, D5 и D6E5 D5 сотрудник E5 совмещает работу в отделах D3, D5 и D6E5 D6 сотрудник E5 совмещает работу в отделах D3, D5 и D6E6 D5 сотрудник E6 работает в отделе D5E7 D7 сотрудник E1 работает в отделе D7 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:45 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
SQL*Plus Это реализовано в виде таблицы связей многие-ко-многим? EMPDEPTcommentE1 D1 сотрудник E1 работает в отделе D1E2 D1 сотрудник E2 совмещает работу в отделах D1 и D2E2 D2 сотрудник E2 совмещает работу в отделах D1 и D2E3 D2 сотрудник E3 совмещает работу в отделах D2 и D3E3 D3 сотрудник E3 совмещает работу в отделах D2 и D3E4 D3 сотрудник E4 совмещает работу в отделах D3 и D4E4 D4 сотрудник E4 совмещает работу в отделах D3 и D4E5 D3 сотрудник E5 совмещает работу в отделах D3, D5 и D6E5 D5 сотрудник E5 совмещает работу в отделах D3, D5 и D6E5 D6 сотрудник E5 совмещает работу в отделах D3, D5 и D6E6 D5 сотрудник E6 работает в отделе D5E7 D7 сотрудник E1 работает в отделе D7 Да, связь многие-ко-многим, т.е. есть таблица связок сотрудников с отделами, назовём её EMP_DEP, она содержит все связки: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 02:17 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
verter Необходимо задав сотрудника, получить список всех сотрудников связанных с ним и друг с другом по отделам, На форуме уже было: Количество груп связей в many to many ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 04:49 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
verter Да, связь многие-ко-многим, т.е. есть таблица связок сотрудников с отделами, назовём её EMP_DEP, она содержит все связки: Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 05:10 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
SY, благодарю за ответ, именно таким образом я и представлял себе, что нужно как то с WITH и регулярными выражениями. я не совсем точно поставил задачу, на самом деле условия задачи такие: есть таблица EMP (e_id integer) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
есть таблица DEP (d_id integer) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
есть таблица-связок многих ко многим EMP_DEP (emp_id integer, dep_id integer) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Необходимо на вход подать id сотрудника, на выходе должен быть датасет из id острудников, связанных по отделам, т.е. так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Я к тому что, никаких строковых литералов не требуется, только IDs. Подскажите, пожалуйста, как тогда переписать ваше решение: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 12:51 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
А сразу CREATE TABLE дать не мог? Просто убери NORMALIZED из моего решения: Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 12:57 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
SY, прошу прощения, всегда сложности из-за неточной постановки задачи Огромное спасибо за это красивое решение! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 12:59 |
|
иерархический запрос по 2-м таблицам
|
|||
---|---|---|---|
#18+
verter прошу прощения, всегда сложности из-за неточной постановки задачи Точная постановка задачи - это уже половина решения. Причем в половине случаев автор сам находит решение в процессе формулирования точной постановки задачи! :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 13:05 |
|
|
start [/forum/topic.php?fid=52&msg=39974357&tid=1881108]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 449ms |
0 / 0 |