|
|
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
На этом форуме часто обсуждаются вопросы, как сделать хитрый селект одной строкой. А у меня вопрос по апдейту. Апдейт, как известно, требует обновляемого запроса и тем самым усложняет задачу. Задаю этот вопрос из чистого любопытства - я сам эту проблему обошел, хотя и не самым красивым образом. Мне просто интересно, разрешимо ли это. Итак, вот постановка: Дана таблица T: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Надо заполнить поле vv везде, где оно не заполнено, следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. То есть для каждого id, где isnull(vv), надо взять максимальное id из меньших данного, но где not isnull(vv), и его vv занести в данную запись. Если надо, то существует отдельная вспомогательная таблица U, построенная на основе T: Код: plaintext 1. 2. Спасибо всем, кто согласится это обсудить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:30 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
В.С. ты мой топик читал..., но всё таки мне кажется, что твой вопрос- аналог моему.... /topic/92324&pg=1#682955 из которого я нашёл решения только через временную таблицу..., хотя на sql сервере всё работает через 1 запрос. (у меня было 3 варианта работающих на серваке и только 1 на аксессе...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:40 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Смотря какая БД. Если чистый Access, то должно работать Код: plaintext 1. 2. 3. 4. Идея вот такая... Будет ли работать под MS-SQL - не знаю. Под Oracle - точно будет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:41 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Да, действительно. Группировки нет. Спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 13:52 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Да, действительно. Группировки нет. Спасибо!!! Но тем не менеe, работать в Акссес не будет. (: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:38 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:39 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Потому что это Access (: Трудно проверить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:43 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
У меня база не при себе... А все-таки? В чем проблема? В том, что слишком большой уровень вложенности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:47 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
2 Саныч Синтаксис Update d Ассеыы - скажем так - необычный а) в инструкции Set - то, что может быть проинтерперетировано как вычисляемое выражение. Функции подмножеств D допустимы, подзапросы в явном виде - нет. То есть проще всего с DMax-ом колдовать, хотя, может быть и придумается что-то другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:50 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
авторВ том, что слишком большой уровень вложенности? в другом - глупый аксесс считает такой запрос необновляемым ему для обновляемости подавай иннер джоин результата с вычисляемым выражением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:53 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
То есть получается, что это в Аксессе одной строкой не сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 14:57 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Можно вот так, к примеру (проверил, работает): Код: plaintext 1. 2. Правда не самый оптимальный способ, но если подумать можно его улучшить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:12 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
взять решение Bely, правую часть после SET w= засунуть в функцию, парметром фунции - MyTbl.id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:16 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
2 CtrlAlt: Увы, это неверно. Вот это: ((T.id)>[T_1].[id]) не учитывает, что имеется несколько таких [T_1].[id] и из них надо брать максимальное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:17 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Функцию - это уже отступление от постановки задачи. Хотелось чистым SQL'ем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:18 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Увы, это неверно А по моему верно. Дело в том что некоторые значения будут перезаписываться по нескольку раз (я это имел ввиду про неоптимальность), но в конце - концов проапдейтятся максимальным значением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:22 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
А где гарантия, что правильный будет последним? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 15:33 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Тогда вот: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Только если открыть в конструкторе и сохранить, Access ломает запрос и он перестает работать... Если нет такой необходимости решить одним запросом, можно среднюю часть сохранить в отдельный запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 16:40 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Но тогда появляется группировка и запрос становится необновляемым. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 17:26 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Предже чем постить, я обычно проверяю работоспособность. Запрос который я привел работает. Он обновляемый. Помогает DISTINCTROW ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 17:38 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Понял, прошу прощения. Про DISTINCTROW не знал, что оно влияет на обновляемость. А почему так происходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 17:41 |
|
||
|
Update одной строкой (из чистого любопытства)
|
|||
|---|---|---|---|
|
#18+
Я и сам не знал. Где-то на этом форуме и прочитал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 17:52 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32530661&tid=1674399]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 484ms |

| 0 / 0 |
