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

Откуда:
Сообщений: 4
Добрый день.

Помогите, пожалуйста, составить запрос для изменения значений поля таблицы, при выполнении ряда условий.
Имеется две таблицы:

- таблица "SP1" содержит поля:
"ОС_доставки" char(9)
"Код_улицы" int

-таблица "Table_1" содержит поля:
"Nov" int
"Star" int
"OS" char(9)

Необходимо заменить значение поля "Код_улицы" в таблице "SP1" на значение из поля "Nov"
таблицы "Table_1", если значение поля "OS" таблицы "Table_1" равно значению поля "ОС_доставки" таблицы "SP1" и
значение поля "Star" таблицы "Table_1" равно значению поля "Код_улицы" таблицы "SP1".
В таблице SP1 записей с одинаковыми "ОС_доставки" и "Код_улицы" может быть несколько.

Я написала следующее:

UPDATE [SP1]
SET [Улица] = Table_1.Nov
WHERE (SELECT Table_1.Nov FROM [Table_1] WHERE ([Table_1].OS IN (SELECT [SP1].ОС_доставки FROM [SP1]))
AND (Table_1.Star IN (SELECT dbo.SP1.Улица FROM [SP1])))

При попытке выполнения выдается сообщение:
Сообщение 4145, уровень 15, состояние 1, строка 4
An expression of non-boolean type specified in a context where a condition is expected, near ')'.
31 янв 13, 18:35    [13858753]     Ответить | Цитировать Сообщить модератору
 Re: Создать запрос, используя UPDATE  [new]
Glory
Member

Откуда:
Сообщений: 104751
BOL - UPDATE

C. Using the UPDATE statement with information from another table
The following example modifies the SalesYTD column in the SalesPerson table to reflect the most recent sales recorded in the SalesOrderHeader table.

UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
JOIN Sales.SalesOrderHeader AS so
    ON sp.BusinessEntityID = so.SalesPersonID
    AND so.OrderDate = (SELECT MAX(OrderDate)
                        FROM Sales.SalesOrderHeader
                        WHERE SalesPersonID = sp.BusinessEntityID);
31 янв 13, 18:39    [13858779]     Ответить | Цитировать Сообщить модератору
 Re: Создать запрос, используя UPDATE  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nadya-1
Я написала следующее:

Напишите сначала SELECT, который просто отобразит текущее поле и на что оно будет меняться
Это на 99% будет готовый UPDATE
31 янв 13, 18:41    [13858790]     Ответить | Цитировать Сообщить модератору
 Re: Создать запрос, используя UPDATE  [new]
Nadya-1
Member

Откуда:
Сообщений: 4
[Glory][/Напишите сначала SELECT, который просто отобразит текущее поле и на что оно будет меняться
Это на 99% будет готовый UPDATE]

Glory, по Вашему совету я написала SELECT. Он выглядит у меня следующим образом:
SELECT [ОС_доставки]
          ,[Улица]
          , T1.Nov
 FROM [SP1] S1, [Table_1] T1 
 WHERE (T1.OS=S1.ОС_доставки) AND (T1.Star=S1.Улица)


В результате получила таблицу с правильным отображением данных в столбцах:

ОС_доставки Улица Nov
427970 64 63
427970 64 63
427920 772 14492
427920 772 14492
427920 772 14492


Однако, как написать запрос UPDATE я по-прежнему не понимаю.
Дело в том, что раньше я запросы никогда не писала т.е "чайник" полный.
Попробовала по аналогии с тем запросом, что Вы привели в первом сообщении. В результате получила:
UPDATE SP1
SET [Улица] = Table_1.Nov
FROM SP1 AS s1
JOIN Table_1 AS t1
    ON s1.Улица = t1.Star
    AND t1.OS = s1.ОС_доставки

При выполнении получаю следующую ошибку:
Сообщение 4104, уровень 16, состояние 1, строка 1
The multi-part identifier "Table_1.Nov" could not be bound.
[/color=red]
31 янв 13, 20:20    [13859186]     Ответить | Цитировать Сообщить модератору
 Re: Создать запрос, используя UPDATE  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Nadya-1,

автор
Table_1 AS t1


Вы же алиас дали таблице.
31 янв 13, 20:35    [13859235]     Ответить | Цитировать Сообщить модератору
 Re: Создать запрос, используя UPDATE  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
а так?
UPDATE SP1
SET [Улица] = t1.Nov
FROM SP1 AS s1
JOIN Table_1 AS t1
    ON s1.Улица = t1.Star
    AND t1.OS = s1.ОС_доставки
31 янв 13, 20:38    [13859241]     Ответить | Цитировать Сообщить модератору
 Re: Создать запрос, используя UPDATE  [new]
Nadya-1
Member

Откуда:
Сообщений: 4
ZVER-10, Спасибо!!! Получилось!!!
31 янв 13, 20:53    [13859290]     Ответить | Цитировать Сообщить модератору
 Re: Создать запрос, используя UPDATE  [new]
Nadya-1
Member

Откуда:
Сообщений: 4
А также огромное спасибо Glory и pkarklin
31 янв 13, 20:56    [13859295]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить