Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Update с вложенным запросом  [new]
flash_back
Member

Откуда:
Сообщений: 11
Всем доброго времени суток!
Возникли сложности с update(sql2008).

таблицы(столбцы):
T1(id,name,p), T2(id,3id,1id), T3(id,name)

Нужно заменить значения в T1.name, где T1.p=1 значениями из T3.name
T1 связанна с Т3 через Т2
T1.id=T2.1id
T2.3id=T3.id

Вот, что получилось:
1)
update T1
set name = (seletc name from T3 inner join T2 on T3.id=T2.3id
inner join T1 on T2.2id=T1.id)
where T1.p=1

Сообщение 512, уровень 16, состояние 1, строка 1
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.
Выполнение данной инструкции было прервано.

2)
update T1
set Name =(select T3.name from T3,T2,T1
where T3.id=T2.T2.3id and T2.2id=T1.id)
where T1.p=1

Сообщение 512, уровень 16, состояние 1, строка 1
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.
Выполнение данной инструкции было прервано.


Подскажите, пожалуйста, как исправить ошибку.
10 апр 13, 11:27    [14160646]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
update T1
set name = ...
from T1
inner join T2 ...
inner join T3 ...
10 апр 13, 11:29    [14160661]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
автор, может, стоит разобраться, почему
flash_back
Вложенный запрос вернул больше одного значения
?
10 апр 13, 11:32    [14160683]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Имена полей могут начинаться с цифры?
И запрос при этом выполняется, да ещё сообщает,
что подзапрос вернул больше одной записи?

Ну-ну!
10 апр 13, 11:37    [14160719]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
flash_back
Member

Откуда:
Сообщений: 11
iap
Имена полей могут начинаться с цифры?
И запрос при этом выполняется, да ещё сообщает,
что подзапрос вернул больше одной записи?

Ну-ну!


Имена полей заменил, для примера просто..
10 апр 13, 11:40    [14160734]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
flash_back
iap
Имена полей могут начинаться с цифры?
И запрос при этом выполняется, да ещё сообщает,
что подзапрос вернул больше одной записи?

Ну-ну!


Имена полей заменил, для примера просто..
Достаточно было окружить их квадратными скобками
10 апр 13, 11:42    [14160748]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
flash_back
Member

Откуда:
Сообщений: 11
Glory
update T1
set name = ...
from T1
inner join T2 ...
inner join T3 ...


я начинающий(совсем :)) "пользователь" sql....
Что надо поставить вместо "..." set name = ... если там для каждой t1.id должно быть изменено t1.name из t3.name

причем name T3 может распространяться на несколько name в T1. тк
10 апр 13, 11:50    [14160807]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
flash_back
должно быть изменено t1.name из t3.name

навереное t3.name. Ведь name слева от знака = это t1.name

flash_back
причем name T3 может распространяться на несколько name в T1. тк

Это уж как вы напишите условия в join-ах
10 апр 13, 11:53    [14160829]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
flash_back
я начинающий(совсем :)) "пользователь" sql....
я надеюсь, это какая-то студенческая БД
потому что если рабочие данные предприятия поручили менять начинающему, это очень плохо

по сабжу: напишите select, выбирающий данные из T1 и еще одной колонкой - соответствующие T3.name
а уж превратить его в update дело не такое сложное
10 апр 13, 12:25    [14161068]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
flash_back
Member

Откуда:
Сообщений: 11
Паганель
flash_back
я начинающий(совсем :)) "пользователь" sql....
я надеюсь, это какая-то студенческая БД
потому что если рабочие данные предприятия поручили менять начинающему, это очень плохо

по сабжу: напишите select, выбирающий данные из T1 и еще одной колонкой - соответствующие T3.name
а уж превратить его в update дело не такое сложное


select колонок из t1 и t3 поставил "все на свои места" :)
update прошел так как надо.

Огромное спасибо!
10 апр 13, 13:39    [14161668]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
flash_back
Member

Откуда:
Сообщений: 11
Подскажите, пожалуйста, как прописать доп. условие update:
Update применять только если кол-во символов(любых) в t1 больше чем t2
10 апр 13, 22:38    [14164443]     Ответить | Цитировать Сообщить модератору
 Re: Update с вложенным запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
flash_back
кол-во символов(любых) в t1
всех символов во всех полях таблицы?
а смысл?
11 апр 13, 10:21    [14165546]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить