|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
Добрый день. Помогите правильно написать FULL JOIN. Имею 2 таблицы, структура и названия полей одинаковые. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ключевые поля: Code, numb Таблица 1 содержит первоначальные данные по отчетам. Таблица 2 Содержит измененные отчеты (так получилось что пришлось изменить отчеты, но так как информация уже отправлена на организации по "таблице1" в текущем месяце нужно внести корректировки относительно "таблица2". Для этого нужно найти разницу "Таблица2"-"Таблица1" В таблицах может быть от 1 до 3 строчек по ключевым полям и по столбцам sm1-sm8 нужно сделать суммирование. Я знаю как просуммировать столбцы, но по каждой таблице отдельно: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Как теперь получить разницу между "Таблица_2" минус "Таблица_1". Причем могут быть дела которые присутствуют в "таблице 1", но отсутствуют в "таблице 2" и наоборот, есть в "таблице 2" - отсутствуют в "таблице 1" Хотелось бы получить что-то пита такого: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Firebird 2.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 16:13 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
Ну или получить что-то такого вида, с суммированием полей SM Code1, numb1, sm1_1, sm2_1, sm3_1, sm4_1, sm5_1, sm6_1, sm7_1, sm8_1, Code2, numb2, sm1_2, sm2_2, sm3_2, sm4_2, sm5_2, sm6_2, sm7_2, sm8_2 с "null" соответственно там где нет в какой-то таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 16:20 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
akrush, FULL JOIN + COALESCE тебе помогут. Правда в 2.5 FULL JOIN будет работать очень долго. Поэтому выворачиваться придётся через LEFT JOIN + UNION ALL + NOT EXISTS ЗЫ. Если Code, numb действительно ключевые поля то запрос с суммированием и агрегатами бредовый ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 16:27 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
Симонов Денис, Спасибо. Но я еще не умею писать JOIN, а время - это не критично. Если справится за 10-15 минут (у меня от 100-250 тыс. строк в 6 отчетов) по каждому отчету - это будет супер Можете помочь как правильно написать. То что я писал ушло в глубокий сон (выборку) я так и не дождался ответа в IBExper и снял его Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 16:34 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
akrush, ...а индекс у тебя есть? сделай в IBE своему запросу Prepare - какой план запроса покажет? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 16:41 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
Симонов Денис, а нельзя сначала сделать отбор distinct пар code, numb с обеих таблиц, а потом просуммировать for-select'ом ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 16:44 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
Arioch, 2.5 не умеет использовать индексы для FULL JOIN akrush, Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 16:54 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
Симонов Денис, Спасибо. Получилось. Сейчас проверю все ли дела попали :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 18:48 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
Симонов Денис, Подскажите: а как результат выполнения запроса в IBExperte Сразу перегнать/сохранить в таблицу в текущей БД ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 22:17 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
akrush, в какую таблицу? Читать совсем не хотим? Для этого есть куча способов INSERT ... SELECT, MERGE, можно EXECUTE BLOCK написать, ну или хранимую процедуру, если будет использоваться не однократно. С FULL JOIN я помог, потому что далеко не все знают на что его заменить чтобы в FB < 3.0 работало быстро. А вот рассказывать элементарные вещи про вставку записей в другую таблицу не хочу. Это всё описано в документации. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 22:32 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
Симонов Денис, Спасибо за подсказку. Совсем забыл ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 23:01 |
|
Помогите написать JOIN
|
|||
---|---|---|---|
#18+
Симонов Денис, ЕЩЕ РАЗ ВСЕМ О-Г-Р-О-М-Н-О-Е СПАСИБО. Получилось очень красиво и быстро. Код: sql 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.
Скорость просто СУПЕР. З=Количество записей в исходных таблицах и в результате: 1307_NEW 1307_OLD CALC_1307 CALC_1307_END ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2016, 23:14 |
|
|
start [/forum/topic.php?fid=40&fpage=57&tid=1562061]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 142ms |
0 / 0 |