Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Вниз

Помогите найти ошибку в запросе СРОЧНО 


СергейКнязев   (2002-02-06 11:48) [0]

update Prices
set price_opt_4=pn.price_opt_4

from Prices p, NewPriceS pn

where p.prodname=pn.prodname
and p.manf_name=pn.manf_name
and p.row=4

На строке с From дает ошибку.
Че не правильно не пойму.



yaJohn   (2002-02-06 12:02) [1]

imelos" v vidu:
update Prices
set price_opt_4=
( select pn.price_opt_4
from Prices p, NewPriceS pn
where p.prodname=pn.prodname
and p.manf_name=pn.manf_name
and p.row=4)


Esli ya ne prav - obiasnite, chto doljno poluchitsia.
Mda, vnutrenniy zapros doljen vozvrashat" strogo odnu zapis". Poetomu luchshe (no ne obiazatel"no) ispol"zovat" agregati.



Val   (2002-02-06 12:03) [2]

извините, но у вас полная чушь написана или диалект MSSQL очень отличаетмся от стандарта, в чем я сомневаюсь.
врядли есть такая конструкция: update..set...from
обычно делают выборку-select..from и берут из нее данные для update, если не используют явных значений.



Alex-A   (2002-02-06 12:17) [3]

Как ошибка-то выглядит?
Синтаксис вроде правильный у меня аналогичный запрос ошибку не возвращает.



Alex-A   (2002-02-06 12:25) [4]

2Val
с точки зрения диалекта Transact-SQL все абсолютно правильно



Val   (2002-02-06 12:57) [5]

Приношу свои извинения СергейКнязев, все таки очень уж отошли от стандарта в данном диалекте..



AlexSV   (2002-02-06 13:18) [6]

На вскидку: для таблицы под update в from надо указывать имя таблицы без алиаса:

update Prices
set price_opt_4=pn.price_opt_4

from Prices, NewPriceS pn

where Prices.prodname=pn.prodname
and Prices.manf_name=pn.manf_name
and Prices.row=4

Если не поможет, то дай больше информации, желательно на Mail.



СергейКнязев   (2002-02-06 13:31) [7]

От диалекта я не отошел в справке по Query Analyzer из MSSQL 7.0 есть такой пример и он написано работает (лажу ведь не подсунут).

Ошибка следующая:
Invalid use of keyword
Token: from
Line Number: 4

Возможно дело в том, что пока таблицы локальные, но для них определен Alias с типом STANDART (парадоксовские таблицы)



Alex-A   (2002-02-06 14:27) [8]

Возможно дело в том, что пока таблицы локальные, но для них определен Alias с типом STANDART (парадоксовские таблицы)
Ну тогда, конечно, прав Val!
Этот запрос будет выполняться только на сервере MSSQL!



СергейКнязев   (2002-02-06 15:00) [9]

Ну а как проапдейтить все поля локальной таблички ссылаясь на другую локальную



yaJohn   (2002-02-06 15:13) [10]

Perechitay moy otvet.



СергейКнязев   (2002-02-06 15:25) [11]

yaJohn, твой запрос не работает даже в таком виде возвращается много записей на одно поле, которое апдейтится, а нужно проапдейтить все строки удовлетворяющие заданному условию.
Если не сложно напиши свой агрегат.
Заранее благодарен.



Alex-A   (2002-02-06 15:30) [12]

2yaJohn: Таким образом проапдейтятся ВСЕ значения Price.price_opt_4 одним и тем же значением.
если я не прав - поправь pls!



СергейКнязев   (2002-02-06 16:25) [13]

Люди я ведь не шучу, очень надо пожалуйста



MetallAdm   (2002-02-06 16:35) [14]

а нелзя ли продекларировать переменные запихать в них что нужно
по условию
и апгрейдить тадличку ??

или я что то не так понял ??



yaJohn   (2002-02-06 17:18) [15]

>твой запрос не работает даже в таком виде возвращается много записей на одно поле, которое апдейтится
Nu ya je ne znau, chto u tebia v baze lejit...
update Prices
(select pn.price_opt_4
from Prices p, NewPriceS pn
where p.prodname=pn.prodname
and p.manf_name=pn.manf_name
and p.row=4
)

Videlenoe uslovie doljno otbirat" strogo ODNU zapis". Kakuu imenno - zavisit ot logoki programmi...

>Таким образом проапдейтятся ВСЕ значения Price.price_opt_4 одним и тем же значением. если я не прав - поправь pls!
Nu da... A razve ne eto trebovalos"? %)
2 СергейКнязев
Sformuliruyte plzs zadachu pokonkretnee... Chto doljno obnovliatsia i otkuda?



СергейКнязев   (2002-02-06 17:54) [16]

Объясняю для yaJohn:
У меня в двух локальных таблицах лежат прайс-листы
в PriceS лежат несколько прайсов, в NewPriceS лежит новый прайс с новыми ценами. Надо в таблице PriceS изменить цены на те позиции у которых prodname из PriceS равен prodname из NewPriceS и manf_name аналогично. То есть взять цены из NewPriceS и обновить цены на аналогичный товар из PriceS. На последнюю строку "and row=4" можно не смотреть.

Спасибо за внимание.



MetallAdm   (2002-02-06 18:17) [17]

Ну Незнаю я Почти такой пример для себя зделал все работает



Alex-A   (2002-02-07 06:42) [18]

2СергейКнязев
Попробуй так:
UPDATE Prices
SET price_opt_4=(SELECT MAX(price_opt_4)
FROM NewPrices pn
WHERE pn.prodname=prodname and
pn.manf_name=manf_name
)
WHERE Row=4

не уверен, что это правильно, но проверить сам не имею возможности.
если проверишь - сообщи, pls!



СергейКнязев   (2002-02-07 08:05) [19]

Ладно НАРОД хватит мучиться, я перевожу локальные таблицы на сервер. И изначальный запрос там работает нормально.

СПАСИБО ВСЕМ, КТО ПРИНЯЛ УЧАСТИЕ В РЕШЕНИЕ МОЕЙ ПРОБЛЕМЫ.

P.S. Для Alex-A. Твой запрос проапдейтит все записи и вставит туда максимальное значение из второй таблицы, а это не то, что надо.
Для YaJohn. Osobaya blagodarnost vam za moy slomaniy i zagipsovaniy teper" yazik.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.032 c
7-9302            Azat                  2001-11-29 03:21  2002.03.04  
Здравствуйте. Как узнать установленное разрешение екрана, бит цветности....


1-9158            макар                 2002-02-13 17:00  2002.03.04  
Вопрос


1-9209            Королев               2002-02-14 11:44  2002.03.04  
как узнать параметры функции импортируемые из DLL?


1-9186            BlankAlex             2002-02-11 10:58  2002.03.04  
Custom Grid


6-9244            rubin                 2001-12-11 11:57  2002.03.04  
Выход в интернет ч-з HTTPS Proxi