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

Откуда: Сибирь
Сообщений: 8
UPDATE  a   SET a.tci =
           (SELECT b.id
              FROM b   WHERE b.roi =
                       (SELECT c.roi
                          FROM c
                         WHERE c.roi =
                                   (SELECT d.roi
                                      FROM d
                                     WHERE d.fi = a.fi)))
   where a.tci = 'o' and a.ed is null


будет ли работать такой запрос нужно что бы значения a.tci = 'o' стали равны значениям b.id ?
Проблема в том что таблицы a и b не связаны на прямую, а связь выглятит так b ->c ->d ->a
И стоит ли искользовать в update вложенный select ?

Сообщение было отредактировано: 23 янв 13, 12:00
23 янв 13, 11:59    [13814256]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Замените update на select и посмотрите.
23 янв 13, 12:00    [13814266]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
Zolmo
Member

Откуда: Сибирь
Сообщений: 8
Гавриленко Сергей Алексеевич, так такой select мне ничего не выдаст. Ибо изначально если a.tci равны нулю они уже не равны b.id
23 янв 13, 12:09    [13814335]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
Glory
Member

Откуда:
Сообщений: 104760
Zolmo
так такой select мне ничего не выдаст.Ибо изначально если a.tci равны нулю они уже не равны b.id

Тогда что поменяется для UPDATE ? Он каким то волшебным образом исправит это ?
23 янв 13, 12:15    [13814377]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
Добрый Э - Эх
Guest
Zolmo,
Zolmo
так такой select мне ничего не выдаст. Ибо изначально если a.tci равны нулю они уже не равны b.id


стало быть твой апдейт заNULLит все значения в поле tci для строк, удовлетворяющих условию a.tci = 'o' and a.ed is null
23 янв 13, 12:16    [13814388]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Запрос очень кривой, поскольку если хотя бы 1 из 3 подзапросов вернет несколькол строк - будет ошибка.
23 янв 13, 12:18    [13814406]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
samoxod
Member

Откуда: Москва
Сообщений: 31
Zolmo,

А так не то же самое будет:
Update a set tci = b.id
   FROM a
   INNER JOIN d on a.fi = d.fi
   INNER JOIN c on d.roi = c.roi
   INNER JOIN b on c.roi = b.roi
   where a.tci = 'o' and a.ed is null

?
А селект точно не возвращает НЕСКОЛЬКО b.id?
23 янв 13, 12:20    [13814424]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
Zolmo
Member

Откуда: Сибирь
Сообщений: 8
поля по которым проходят селекты уникальны, повторений быть не должно.
23 янв 13, 12:30    [13814502]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
Zolmo
Member

Откуда: Сибирь
Сообщений: 8
нет, это id таблицы, там не может быть повторений =)
23 янв 13, 12:31    [13814508]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Zolmo
нет, это id таблицы, там не может быть повторений =)
Какой таблицы?
Их там вон сколько
Повторения вполне себе возможны, если отношение хотя бы между двумя таблицами не 1:1
23 янв 13, 13:02    [13814787]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Zolmo
так такой select мне ничего не выдаст

А вы такой select попробуйте:
   select a.*,
           tci_new =
           (SELECT b.id
              FROM b   WHERE b.roi =
                       (SELECT c.roi
                          FROM c
                         WHERE c.roi =
                                   (SELECT d.roi
                                      FROM d
                                     WHERE d.fi = a.fi)))
   from a
   where a.tci = 'o' and a.ed is null
23 янв 13, 13:29    [13815036]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, пройдет ли такой Update  [new]
Zolmo
Member

Откуда: Сибирь
Сообщений: 8
Всем спосибо =) Проблему решили другим способом =)
25 янв 13, 05:35    [13825037]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить