|
|
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
Подзапрос в условии возвращает статические данные на начало запроса, а что делать, если запрос влияет на подзапрос Код: 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. Т.е. подзапрос Код: plaintext Как сделать так, чтобы подзапрос динамически обновлялся. Т.е. чтобы в таблицу at2 попала только одна запись " 3 , c ". (Вариант с последующим удалением двойников я знаю) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2002, 17:30:27 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
Может так? insert into at2(f1,f2) select distinct f1,f2 from at1 where not exists(select 1 from at2 where at1.f1=at2.f1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2002, 17:58:41 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
нет, ведь запрос вставляет данные в таблицу условий. Нужно динамически отслеживать изменения в таблице at2 (очень интересует решение без курсоров) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 10:25:06 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
IMHO запросы нужно делать так, чтобы неправильные данные в принципе не генерировались, а не пытаться придумать, как их отфильтровывать в процессе вставки. Что касается distinct - такой запрос в принципе не может вставить противоречивых данных в таблицу, и я не понимаю, почему он не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 11:11:17 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
содержимое таблиц на перед выполнением Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Данные вставляются из at1 в at2 . И только те, которых нет в at2 . Запись "3 , c" на начало запроса отсутствует в at2 . После выполнения запроса она появится в таблице at2 два раза. А мне нужно - один. В реальности таблицы не такие простые => distinct не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 12:08:36 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
Сразу нужно говорить, что и как. Можно такое использовать: Код: plaintext 1. 2. Или еще как-нибудь посложнее. Вариантов много. P.S. Больной, не занимайтесь самолечением, доктор сказал в морг - значит в морг! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 12:32:30 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
Конечно, это очень интересно, но меня интересует есть ли способ формировать в условии where динамические данные. Т.е. чтобы после первой вставки "3 , c" в at2 условие where это видело и не вставляло запись еще раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 12:41:45 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
Непонятно, чего-же Вы хотите. Выбираете все записи из at1, кроме тех, которые имеют совпадающие в at2. Затем добавляете этот набор в at2. Всё получается так, как и задано. Но Вы считаете, что это неправильно? Или хотите понять, как сделать так, как Вам нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 12:52:34 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
мне нужно, чтобы "кроме тех", обновлялся в процессе запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 13:10:56 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
Как это все работает - он сначала выбирает данные по фильтру, потом складирует их в произвольном месте по своему выбору, и только потом вставляет. К месту складирования если и можно добраться, то только через задницу, которая называется прямое редактирование оперативной памяти. В сиквеле нет понятия "во время запроса". Запрос во время исполнения - это незавершенная транзакция. Данные, которые изменяются в ней не будут видны ни ей самой, ни остальным. Тут даже isolation level read uncommitted не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 13:34:30 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
Хорошее дополнение "во время запроса".. Совет - всегда разбивай сложный запрос на несколько этапов, получишь кучу плюсов 1. Возможность отладки "по частям" с промежуточным просмотром итогов 2. Возможность эффективного upgrade когда изменение в одном небольшом блоке не рушит работу всего запроса 3. Более "прозрачный" вид запроса 4. В большинстве слцчаев резкое повышение производительности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 13:37:51 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
Так ведь он (SQL Server) сначала выбирает ВСЕ, которые в SELECTе, а потом вставляет ВСЕ, которые выбрал. От этого и отталкивайтесь в своих желаниях. Т.е. сформируйте SELECT так, чтобы выбрались только те записи, которые нужно для последующей вставки. А тот режим работы, как Вы хотите, я встречал на InterBase. Там запрос типа Код: plaintext 1. привёл к зацикливанию исполнения. (Я не спец по IB, и если кто-то знает, что это легко обойти, не ругайтесь - я не в упрёк IB, а лишь в качестве примера.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 13:43:59 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
если я правильно понял, то попробуй так Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 14:26:20 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
как говорилось выше - запрос в принципе не делимая сущность...( с оговорками кнечно).... может тебе это поможет... без курсора... ;)) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 16:38:36 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
Не знаю чем вам так не подходит distinc/group - вам виднее. Но если в цикле тогда так примерно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2002, 23:40:05 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
спасибо всем Тк, судя по кол-вам просмотров, вопрос заинтересовал многих, привожу еще один вариант, основанный на создании уникального индекса с игнорированием дубликатов Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2002, 01:12:46 |
|
||
|
Как статические данные в условии where превратить в динамические
|
|||
|---|---|---|---|
|
#18+
antonz , вы как Россия... умом вас не понять. а судя по тому сколь орегинальное решение собственной задчи вы нашли, то и аршином общим не измерить. От лица участников обсуждения хочу предложить вам наш вариант запроса. Он не столь изящен, но вылает тот же самый результат и, к томуже, не генерит ошибку. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2002, 15:27:19 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32062020&tid=1819293]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 318ms |

| 0 / 0 |
