Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работает ли подобный запрос? 
V
    Опции темы
Lunatikus
Дата 21.8.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



Код

UPDATE table SET table.pole=table1.pole WHERE table.a=table3.a AND table3.b=table4.b

возможно ли такое написание с использованием других таблиц как в простом SELECT'е?Просто пока проверить не могу,а знать надо.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Akina
Дата 21.8.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Типа такого - да. Именно такое - нет, потому как table1 отсутствует в секции update


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Lunatikus
Дата 21.8.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



вот конкретный пример,который не работает(ошибка:the column prefix 'OST' does not match with a table name or alias name used in the query):
Код

UPDATE DEAL SET DEAL.a=OST.a WHERE OST.b=UNI.b AND SCLAD.c=OST.ID AND DEAL.date=:date


таблица OST и все остальные существуют

Это сообщение отредактировал(а) Lunatikus - 21.8.2007, 16:40


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
kobra
Дата 21.8.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



Код

update t1 
set t1.n = (select t2.n from t2 where t2.id = t1.id)
where t1.id in (select t2.id from t2)

PM MAIL   Вверх
Lunatikus
Дата 22.8.2007, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



Цитата(kobra @  21.8.2007,  21:04 Найти цитируемый пост)

(select t2.n from t2 where t2.id = t1.id)

и это работает?откуда инфа по t1?все равно будет перебирать ее,даже если не указан во FROM'e?



--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Akina
Дата 22.8.2007, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Блин, учите матчасть! или хоть что-нибудь!
Код

UPDATE DEAL, OST, UNI, SCLAD SET DEAL.a=OST.a WHERE OST.b=UNI.b AND SCLAD.c=OST.ID AND DEAL.date=:date 



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Lunatikus
Дата 22.8.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



от блин....а ларчик просто открывался...ну нуп я =\ теперь знаю,спасибо,Akina


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Lunatikus
Дата 22.8.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



и снова появились черви.Попробовал в Аксесе сэмулировать этот запрос-сработало.В MS SQL Server'e 2000 ругается на синтаксическую ошибку "near '','' ",т.е. там где вначале перечисляются таблицы для обновления через запятую.
Код

UPDATE DEAL,OST,UNI,SCLAD SET DEAL.ost=OST.ost WHERE
DEAL.uni=UNI.uni 
AND UNI.art=OST.art
AND SCLAD.ID=OST.ID_SCLAD




--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Akina
Дата 22.8.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



MSDN - Platform SDK - MS SQL Srv. - T-SQL Reference - UPDATE

Читать до полного просветления.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Lunatikus
Дата 22.8.2007, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



все,что я понял из этого-MS SQL Srv,UPDATE.Если указываешь направление мышления,хотя бы указывай с краткими пояснениями.Я далеко не профессионал в этом деле,месяц назад только начал работать с данной СУБД(тем более не админить а программировать)

P.S.:поиск поюзал-множество непонятных англоязычных слов,то,что на русском-тоже не особо понятно

Это сообщение отредактировал(а) Lunatikus - 22.8.2007, 11:54


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Lunatikus
Дата 22.8.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



"Указание более чем одной таблицы в инструкции UPDATE не соответствует стандарту и приводит к неоднозначности"
в таком случае зачем ты посоветовал

Цитата(Akina @  22.8.2007,  09:23 Найти цитируемый пост)
UPDATE DEAL, OST, UNI, SCLAD SET DEAL.a=OST.a WHERE OST.b=UNI.b AND SCLAD.c=OST.ID AND DEAL.date=:date 

???


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Akina
Дата 22.8.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(Lunatikus @  22.8.2007,  13:51 Найти цитируемый пост)
в таком случае зачем ты посоветовал

Я поправил его в ту форму, в которой чисто синтаксически его съест MySQL. У MS SQL синтаксис иной. А править отсутствие логики в чужом запросе, не имея исходных данных, мне влом.

Цитата(Lunatikus @  22.8.2007,  12:53 Найти цитируемый пост)
множество непонятных англоязычных слов

В конце - примеры.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Lunatikus
Дата 22.8.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



Цитата(Akina @  22.8.2007,  13:10 Найти цитируемый пост)
В конце - примеры. 

я имел в виду поиск не по msdn.Если искать там по указанным тобой словам выдается множество статей,среди которых я пока ничего путного не нашел.Если знаешь конкретную страницу,поделись ссылкой,пожалуйста.читать все это можно очень долго.Мне такое "просветление" ни к чему.

Это сообщение отредактировал(а) Lunatikus - 22.8.2007, 13:31


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Lunatikus
Дата 22.8.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



ладно,вопрос,в принципе,решен.Звучал же "работает ли подобный запрос?".Работает.Но не в MS SL Server 2000.Решил по-другому-средствами ADOQuery с разделение на два запроса.Если кому надо,выложу код.Просто программирую на другой машине вне сети-переносить лень.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Idsa
Дата 22.8.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: нет
Всего: 62



Цитата(Lunatikus @  22.8.2007,  14:51 Найти цитируемый пост)
Если кому надо,выложу код

Надо

Цитата(Lunatikus @  22.8.2007,  14:51 Найти цитируемый пост)
Но не в MS SL Server 2000.

Хм... Странно, очень странно, ведь MSSQL 2000 очень даже неплохая СУБД. Может, все-таки есть какой-то вариант? Может, 2005-й научился это делать?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Lunatikus
Дата 22.8.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



немного упростил условие во втором запросе для простоты восприятия
Код

ADOQuery1.SQL.text:='UPDATE DEAL SET ost=:ost WHERE uni=:uni AND data=CONVERT(DATETIME,FLOOR(CONVERT(DATETIME,GETDATE())))';
ADOQuery2.SQL.text:='SELECT UNIVERS.uni,OST.ost FROM UNIVERS,OST,SCLAD WHERE UNIVERS.art=OST.art AND OST.ID_SCLAD=SCLAD.ID_SCLAD';
ADOQuery2.Open;
while not ADOQuery2.eof do
        begin
        ADOQuery1.parameters.parambyname('uni').value:=ADOQuery2.fields[0].asstring;
        ADOQuery1.parameters.parambyname('ost').value:=ADOQuery2.fields[1].asstring;
        ADOQuery1.execSQL;
        ADOQuery2.next;
        end;


так можно обойтись без двух и более таблиц в условии апдейта.как мало я знаю...приходится вот такими грубыми методами,хотя,по-хорошему, надо делать все в одном запросе.Стопудово можно составить,но время поджимает и приходится довольствоваться такими вариантами.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
kobra
Дата 22.8.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



люди, ауууууу
веть я с самого начала написал рабочий запрос. а вместо того чтоб протестить его просто игнорировали. 
ну дело ваше. мучаитес на здоровье

Это сообщение отредактировал(а) kobra - 22.8.2007, 15:18
PM MAIL   Вверх
Lunatikus
Дата 22.8.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



неправда!я не игнорил,я по нему даже переспросил тебя,а вот дальше ты промолчал и я решил пока в сторону его отложить-не получилось слету под свою ситуацию его подстроить
чтото не выходит подстроить под свою структуру таблиц...слишком запутанные связи,блин
вот таблицы:
DEAL(данные по остаткам продукции на складе по каждому универсальному артикулу на каждый день)
data,
uni,
ost

OST(данные по остаткам каждого обычного артикула(одному универсальному соответствует несколько обычных) на текущую дату по складам)
art,
ost,
id_sclad

SCLAD(справочник складов)
id_sclad
name_sclad

UNIVER(справочник универсальных артикулов)
uni
art

работаем только со складом с названием "Бла".
Надо обновить остатки в таблице DEAL на текущий день.

Если будет желание,можешь проверить.Я еще попытаюсь осбрать чтото по схеме,предложенной тобой,но хз-хз...

Это сообщение отредактировал(а) Lunatikus - 22.8.2007, 15:32


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
kobra
Дата 22.8.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



Lunatikus выложи скрипт создания таблиц и заполнения (пару троику строк).
завтра наверняка будет врея один запрос состряпать.
PM MAIL   Вверх
Akina
Дата 22.8.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(Lunatikus @  22.8.2007,  14:31 Найти цитируемый пост)
Если искать там по указанным тобой словам выдается множество статей

А если воспринимать то, что мной написано, как пункты дерева статей (заголовки подразделов)?


Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  1.gif 11,64 Kb


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Lunatikus
Дата 22.8.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



ну...вот в простом виде на три строки в каждой таблице:


Код

CREATE TABLE DEAL(data datetime NULL,uni varchar[30] NULL,ost float NULL);
CREATE TABLE OST(art varchar[30] NULL,ost float NULL,id_sclad integer NULL);
CREATE TABLE UNIVER(uni varchar[30] NULL,art varchar[30] NULL);
CREATE TABLE SCLAD(id_sclad integer NULL,name_sclad varchar[30] NULL);

INSERT INTO DEAL(data,uni,ost)                 VALUES(21.08.2007,first,10);
INSERT INTO DEAL(data,uni,ost)                 VALUES(22.08.2007,second,15);
INSERT INTO DEAL(data,uni,ost)                 VALUES(23.08.2007,first,25);

INSERT INTO OST(art,ost,id_sclad)             VALUES(first1,100,1);
INSERT INTO OST(art,ost,id_sclad)             VALUES(first2,30,1);
INSERT INTO OST(art,ost,id_sclad)             VALUES(second2,20,2);

INSERT INTO UNIVER(uni,art)                      VALUES(first,first1);
INSERT INTO UNIVER(uni,art)                      VALUES(first,first2);
INSERT INTO UNIVER(uni,art)                      VALUES(second,second2);

INSERT INTO SCLAD(id_sclad,name_sclad) VALUES(1,Bla);
INSERT INTO SCLAD(id_sclad,name_sclad) VALUES(2,Mur);
INSERT INTO SCLAD(id_sclad,name_sclad) VALUES(3,Kva);

вроде все


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Lunatikus
Дата 22.8.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



Цитата(Akina @  22.8.2007,  15:49 Найти цитируемый пост)
А если воспринимать то, что мной написано, как пункты дерева статей (заголовки подразделов)?

тогда все получается просто шоколадно.Я ступил в том,что не понял,о чем речь.Я никогда еще не работал со справкой в MS SQL Srv.Только после твоего скрина понял,о чем ты.А раньше думал,что отсылаешь в инет на сайт msdn.com.Там же тоже поисковая система.А теперь нашел,где был недочет,от как:

Код

UPDATE t1 SET t1.a=t2.a FROM t1,t2,t3 WHERE t2.b=t3.b AND <любые другие условия на указанные в FROM'е таблицы>


попробовал,все получилось!И время выполнения даже уменьшилось раза в два.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Idsa
Дата 22.8.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: нет
Всего: 62



Как же просто... smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Vit
Дата 22.8.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Есть ещё один синтаксис для сложных Update:

Код

Update Table1
Set MyField=t2.Myfield, MyAnotherField=t3.MyAnotherField
From Table1 as t1
Inner join Table2 as t2 on t1...=t2...
Left outer join Table3 as t3 on t1...=t3...



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.1128 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.