![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Update [D5, dBase, FoxPro]
User_OKA © (2007-02-21 09:36:00)Как написать запрос по обновлению одной БД, по ключевому полю из другой базы данных?
ЮЮ (2007-02-22 07:43:00) [1]
> 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 ?
User_OKA (2007-02-21 14:26:00) [2]> stone
напиши правильно
условия я сказал
stone (2007-02-21 14:19:00) [3]
> отрабатывает без ошибки, но в базе из 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:13:00) [4]В первом случае:
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 записей
Desdechado (2007-02-21 14:04:00) [5]Еще раз:
А текст ошибки думать помогает?
User_OKA (2007-02-21 13:50:00) [6]> 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)
stone (2007-02-21 13:35:00) [7]
> 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)
Это как? какое по твоему значение поля из подзапроса должно присвоиться?
Desdechado (2007-02-21 13:29:00) [8]> но вылетает посередине.я так думаю памяти не хватает.
А текст ошибки думать помогает?
User_OKA (2007-02-21 13:18:00) [9]поле 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:06:00) [10]> Нужно обновить поле newstrana в таблица1
> поле strana в таблице1 пустое, в таблице2 его нет
Какое-то противоречие, не находишь?
Может, нужно не обновить, а дополнить справочник?
User_OKA (2007-02-21 12:46:00) [11]а чем мне поможет LocalSQL.hlp
синтаксис команды UPDATE я знаю
такой запрос:
UPDATE Имя_Первой_Таблицы SET newstrana=SELECT newstrana FROM Имя_Второй_Таблицы Where (Имя_Первой_Таблицы.strana=Имя_Второй_Таблицы.strana)
отрабатывает неправильно.
поле strana в таблице1 пустое, в таблице2 его нет
он все равно заполняет значение newstrana
stone (2007-02-21 11:59:00) [12]
> User_OKA (21.02.07 11:52) [3]
см. LocalSQL.hlp по ключевому слову Update
User_OKA (2007-02-21 11:52:00) [13]есть таблица1: поля ..., strana, newsrana
таблица2: поля strana, kod, newstrana
Нужно обновить поле newstrana в таблица1
по ключевому полю strana, значение newstrana таблица2
Gin2 (2007-02-21 11:43:00) [14]телепатируем: база данных=таблица, ключевое поле=ПК.
update Table
set Field2 = 'bla-bla'
where id = 200
Desdechado (2007-02-21 11:13:00) [15]Что есть "ключевое поле базы данных"?
Опиши на пальцах процесс.