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

Откуда: Украина
Сообщений: 334
Есть запрос
UPDATE tblMain 
SET 
	Price = (select PriceUSD *(select UAH from tblCurrenciesCourses where ID = (select MAX(ID) from tblCurrenciesCourses)))
	
WHERE 
	PriceUSD IS NOT NULL

Его смысл в том, что он берёт для каждого товара егу цену в USD и умножает на
(select UAH from tblCurrenciesCourses where ID = (select MAX(ID) from tblCurrenciesCourses)
то есть на последний курс доллара, а после этого присваивает это значение другому столбцу.

Всё работает нормально, но дело в том, что после некоторых изменений в программе стороннего производителя он перестал понимать запрос.

Программа говорит, что в этом участке
 (select PriceUSD *(select UAH from tblCurrenciesCourses where ID = (select MAX(ID) from tblCurrenciesCourses)))
Есть SELECT, но ей не понятно, откуда этот селект.

Но если написать код таким образом
UPDATE tblMain 
SET 
	Price = (select PriceUSD*(select UAH from tblCurrenciesCourses where ID = (select MAX(ID) from tblCurrenciesCourses)) from tblMain )
WHERE 
	PriceUSD IS NOT NULL

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


Я понимаю, почему оно так реагирует, но я не знаю как переписать этот запрос.

В общем помогите пожалуйста написать запрос по человечески, я не знаю как это делают нормальные люди, я как всегда пишу быдлокод(

Если абстрагироваться, то приведу пример.
Таблица Товары
Товар Цена USD Цена Грн
Вазелин 1 0
Обезболивающие 1.2 0

Таблица Курс валюты
IDВалюта UAH
2USD 13
1USD 10

А после магического запроса должно быть так
Таблица Товары
Товар Цена USD Цена Грн
Вазелин 1 13
Обезболивающие 1.2 15.6
17 апр 14, 22:37    [15898576]     Ответить | Цитировать Сообщить модератору
 Re: Помогите исправить говнокод  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31440
Kimel
Программа говорит, что в этом участке
 (select PriceUSD *(select UAH from tblCurrenciesCourses where ID = (select MAX(ID) from tblCurrenciesCourses)))

Есть SELECT, но ей не понятно, откуда этот селект.
Уберите слово select
17 апр 14, 22:41    [15898590]     Ответить | Цитировать Сообщить модератору
 Re: Помогите исправить говнокод  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
alexeyvg,

Спасибо огромное, помогло, вы гений.
У меня уже такое было раз 10, когда MS SQL Studio не жалуется, а молча выполняет, а программы сторонние жалуются.
17 апр 14, 22:48    [15898604]     Ответить | Цитировать Сообщить модератору
 Re: Помогите исправить говнокод  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31440
Kimel
Спасибо огромное, помогло, вы гений.
У меня уже такое было раз 10, когда MS SQL Studio не жалуется, а молча выполняет, а программы сторонние жалуются.
Я просто знаю синтаксис :-)
Лучше вообще так переписать, для понятности:
UPDATE tblMain 
SET 
	Price = PriceUSD * (select TOP 1 UAH from tblCurrenciesCourses ORDER BY ID DESC)
	
WHERE 
	PriceUSD IS NOT NULL
17 апр 14, 23:25    [15898700]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить