Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

Update   Найти похожие ветки 

 
User_OKA   (2007-02-21 09:36) [0]

Как написать запрос по обновлению одной БД, по ключевому полю из другой базы данных?


 
Desdechado ©   (2007-02-21 11:13) [1]

Что есть "ключевое поле базы данных"?
Опиши на пальцах процесс.


 
Gin2   (2007-02-21 11:43) [2]

телепатируем: база данных=таблица, ключевое поле=ПК.
update Table
set Field2 = "bla-bla"
where id = 200


 
User_OKA   (2007-02-21 11:52) [3]

есть таблица1: поля ..., strana, newsrana
      таблица2: поля strana, kod, newstrana

Нужно обновить поле newstrana в таблица1
по ключевому полю strana, значение newstrana таблица2


 
stone ©   (2007-02-21 11:59) [4]


> User_OKA   (21.02.07 11:52) [3]

см. LocalSQL.hlp по ключевому слову Update


 
User_OKA   (2007-02-21 12:46) [5]

а чем мне поможет LocalSQL.hlp
синтаксис команды UPDATE я знаю

такой запрос:

UPDATE Имя_Первой_Таблицы SET newstrana=SELECT newstrana FROM Имя_Второй_Таблицы Where (Имя_Первой_Таблицы.strana=Имя_Второй_Таблицы.strana)

отрабатывает неправильно.

поле strana в таблице1 пустое, в таблице2 его нет
он все равно заполняет значение newstrana


 
Desdechado ©   (2007-02-21 13:06) [6]

> Нужно обновить поле newstrana в таблица1
> поле strana в таблице1 пустое, в таблице2 его нет
Какое-то противоречие, не находишь?
Может, нужно не обновить, а дополнить справочник?


 
User_OKA   (2007-02-21 13:18) [7]

поле strana в таблице1 пустое, в таблице2 его нет

это частный случай.
в основном поле strana в таблице1 заполненно и таблице2 есть соответствие

вот такой запрос работает,

update "C:\Rex06\SVA\Valera.DBF" A
set A.Strana=(select B.Strana, count(B.Strana)
             from "C:\Rex06\SVA\CountriesWorld.DBF" B
             where (A.Russ=B.Russ)
             group by B.Strana
             having count(B.Strana) > 0)
where A.kol > 0

но вылетает посередине.
я так думаю памяти не хватает.


 
Desdechado ©   (2007-02-21 13:29) [8]

> но вылетает посередине.я так думаю памяти не хватает.
А текст ошибки думать помогает?


 
stone ©   (2007-02-21 13:35) [9]


> A.Strana=(select B.Strana, count(B.Strana)
>              from "C:\Rex06\SVA\CountriesWorld.DBF" B
>              where (A.Russ=B.Russ)
>              group by B.Strana
>              having count(B.Strana) > 0)

Это как? какое по твоему значение поля из подзапроса должно присвоиться?


 
User_OKA   (2007-02-21 13:50) [10]

> stone
Можно так все равно вылетает с ошибкой, где-то в середине базы:
update "C:\Rex06\SVA\Valera.DBF" A
set A.Strana=(select B.Strana from "C:\Rex06\SVA\CountriesWorld.DBF" B where (A.Russ=B.Russ))
where ((select count(B.Strana) from "C:\Rex06\SVA\CountriesWorld.DBF" B where(B.Russ=A.Russ)) > 0) and
     (A.kol > 0)


 
Desdechado ©   (2007-02-21 14:04) [11]

Еще раз:
А текст ошибки думать помогает?


 
User_OKA   (2007-02-21 14:13) [12]

В первом случае:
update "C:\Rex06\SVA\Valera.DBF" A
set A.Strana=(select B.Strana, count(B.Strana)
            from "C:\Rex06\SVA\CountriesWorld.DBF" B
            where (A.Russ=B.Russ)
            group by B.Strana
            having count(B.Strana) > 0)
where A.kol > 0

ошибка:
Operation not applicable.
File or directory does not exist.
File: C:\Program Files\Borland\Delphi5\Bin\_QSQL000.DBF

обработано около 2200 записей

Во втором случае:
update "C:\Rex06\SVA\Valera.DBF" A
set A.Strana=(select B.Strana from "C:\Rex06\SVA\CountriesWorld.DBF" B where (A.Russ=B.Russ))
where ((select count(B.Strana) from "C:\Rex06\SVA\CountriesWorld.DBF" B where(B.Russ=A.Russ)) > 0) and
     (A.kol > 0)

отрабатывает без ошибки, но в базе из 10000 записей, обработанно около 2200 записей


 
stone ©   (2007-02-21 14:19) [13]


> отрабатывает без ошибки, но в базе из 10000 записей, обработанно
> около 2200 записей

у тебя набор данных ограничен условиями, не так ли?


> A.Strana=(select B.Strana from "C:\Rex06\SVA\CountriesWorld.
> DBF" B where (A.Russ=B.Russ))
> where ((select count(B.Strana) from "C:\Rex06\SVA\CountriesWorld.
> DBF" B where(B.Russ=A.Russ)) > 0) and
>      (A.kol > 0)

И все таки учи SQL, так писать нельзя :)


 
User_OKA   (2007-02-21 14:26) [14]

> stone
напиши правильно
условия я сказал


 
ЮЮ ©   (2007-02-22 07:43) [15]


> User_OKA   (21.02.07 11:52) [3]
> есть таблица1: поля ..., strana, newsrana
>       таблица2: поля strana, kod, newstrana
>
> Нужно обновить поле newstrana в таблица1
> по ключевому полю strana, значение newstrana таблица2


where (A.Russ=B.Russ)

В [3] не было никакких Russ. Почему сязь серез них, если "в основном поле strana в таблице1 заполненно и таблице2 есть соответствие"

синтаксис команды UPDATE я знаю

такой запрос:

UPDATE Имя_Первой_Таблицы SET newstrana=SELECT newstrana FROM Имя_Второй_Таблицы Where (Имя_Первой_Таблицы.strana=Имя_Второй_Таблицы.strana)

отрабатывает неправильно.

поле strana в таблице1 пустое, в таблице2 его нет
он все равно заполняет значение newstrana


Неверю. Более того, твой запрос проитиворечит синтаксису SQL, ибо подзапрос может вернуть несколько записей, а ты присваиваешь полю. Правда, возможно, ошибка сказывается только в RunTime, хотя сомнительно.

З.Ы. Может слегка нормализовать БД и избавиться от необходимости лишних телодвижений?

З.Ы. Структура позволяет при одном и том же значении поля strana в таблица2
иметь совершенно разные значения newstrana. Какое из них ты хочешь увидеть в  таблица1.newstrana ?



Страницы: 1 вся ветка

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.088 c
15-1172142753
ПЛОВ
2007-02-22 14:12
2007.03.18
Постоянно повышайте свою квалификацию, а не то...


2-1172556903
Proxytel
2007-02-27 09:15
2007.03.18
Управлять именем объекта в ходе выполнения программы


15-1171961362
magisrtu
2007-02-20 11:49
2007.03.18
Скажите,


15-1171964898
Prohodil Mimo
2007-02-20 12:48
2007.03.18
Есть ли в природе просмотрщик VSD (Visio) файлов ?


1-1169738789
olegz77
2007-01-25 18:26
2007.03.18
Вывод графиков с неоднозначностями в TChart