Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UPDATE, поле в запросе перекрывает поле таблицы 
:(
    Опции темы
Platon
Дата 16.7.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: нет
Всего: 40



Здравствуйте, уважаемые.

Я что-то не пойму как сделать так, чтоб поле обновляемой таблицы не перекрывалось полем запроса.

Вот пример:

Код

UPDATE Cars
SET speed = (SELECT AVG(speed) FROM Cars c WHERE c.class = class) 

WHERE speed = NULL
 

MS SQL 

Это сообщение отредактировал(а) Platon - 17.7.2006, 07:53
PM MAIL ICQ   Вверх
chief39
Дата 17.7.2006, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: нет
Всего: 77



Не совсем понятен вопрос.
Как должно быть в результате и что не получается сейчас?
интуитивно:
Cars алиась как СС. 
И далее: CC.speed, CC.speed
 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Platon
Дата 17.7.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: нет
Всего: 40



chief39, не катит такой подход 
PM MAIL ICQ   Вверх
chief39
Дата 17.7.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: нет
Всего: 77



Расскажи толком что надо и что именно не прокатывает.
Пока что не ясно что именно не выходит 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Platon
Дата 17.7.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: нет
Всего: 40



Ты правильно понял идею. Я тоже хотел сделать алиас

Код

UPDATE Cars AS c1
SET speed = (SELECT AVG(speed) FROM Cars c2 WHERE c1.class = c2.class) 
WHERE speed IS NULL

Но ругается на синтаксис, рядом с AS, т. е. на алиас.

Задание сформулирую так: Дана таблица машин: поля: name(KEY), class, speed(NULL). Заменить незаданные поля speed средней скоростью класса данной машины. 

Я тут подумал, а что сделать если так:

Код

UPDATE Cars
SET speed = (SELECT AVG(sp) FROM (SELECT class AS cl, speed AS sp FROM Cars) AS c2 WHERE class = c2.cl) 
WHERE speed IS NULL


Идея ясна, но тупая реализация. Можно ли проще? И что это за "@", которые появляются перед переменными?  

Это сообщение отредактировал(а) Platon - 17.7.2006, 17:54
PM MAIL ICQ   Вверх
chief39
Дата 17.7.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: нет
Всего: 77



Цитата(Platon @  17.7.2006,  15:51 Найти цитируемый пост)
Но ругается на синтаксис, рядом с AS, т. е. на алиас.

Попробуй без AS

у меня на оракле только что отработало так:

Код

update  ttt t1
set  t1.y = ( select  avg( t2.y ) from  ttt t2 )
where  t1.y is null


ЗЫ: я, чессс говоря, не помню... но в МСе на налл проверяется так "t1.y = null" ?
 

Это сообщение отредактировал(а) chief39 - 17.7.2006, 17:16


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Platon
Дата 17.7.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: нет
Всего: 40



Нет, в MS SQL IS NULL, но как реализовать попроще? 

Это сообщение отредактировал(а) Platon - 17.7.2006, 17:55
PM MAIL ICQ   Вверх
chief39
Дата 17.7.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: нет
Всего: 77



Цитата(Platon @  17.7.2006,  17:50 Найти цитируемый пост)
но как реализовать попроще? 

Без вложенного select avg() ??
Хм... ну как по мне - то никак. Может специфически для какой-то СУБД....
А что тебя в последнем варианте пугает? 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Platon
Дата 17.7.2006, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: нет
Всего: 40



Да нет же. Вложенный avg() - это суть запроса, без него никуда не деться
Просто, когда запрос большой очень неприячтно мусолить глаза будет (SELECT class AS cl, speed AS sp FROM Cars) AS c2. И тем более надо непутатться с cl и class, sp и speed.
  

Это сообщение отредактировал(а) Platon - 17.7.2006, 20:14
PM MAIL ICQ   Вверх
LSD
Дата 17.7.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: нет
Всего: 538



В Oracle в таком виде:
Код
update TEST_TBL T1
   set T1.VALUE = (select avg(T2.VALUE) from TEST_TBL T2 where T2.ID = T1.ID)
 where T1.VALUE is null

запрос отрабатывает без проблем, так что проблема в синтаксисе MS SQL Server.   


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Mephisto
Дата 24.7.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Можно и 
Код

UPDATE table1
set value = t2.value
From table1 t1 inner join table2 t2 on t1.cod = t2.cod
 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.