Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
[sql] научите меня пользоваться командой update (задавать разные значения разным полям) 11.06.14 07:21
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
Есть две таблицы: A(id, kod, ostatok), B(id,kod,ostatok). Нужно пользуясь данными таблицы A периодически обновлять данные таблицы B.
Самому в пользовании командой UPDATE удалось продвинуться только до того, чтобы устанавливать одинаковые значения, вроде UPDATE B SET ostatok= '1' WHERE kod IN (SELECT kod FROM A).
В википедии есть какой-то пример, но он сильно сложный – там сразу несколько возможностей SQL демонстрируется. Вычленить из него нужную мне часть, не получилось. На других ресурсах, похоже из той же википедии пример везде взят.
Покажите пожалуйста более простой пример, который поможет мне решить мою задачу.
|
 |
Всем спасибо! Удалось таки собрать необходимый запрос. 09.01.15 02:16
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
|
 |
какой сервер rdbms? 25.06.14 00:15
Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 26.06.14 21:29 Количество правок: 2
|
Если MS SQL, то так:
UPDATE A
FROM A
INNER JOIN B ON B.kod = A.kod
SET A.ostatok = B.ostatok
---
Для Firebird/Interbase это может выглядеть так:
EXECUTE BLOCK
AS
DECLARE VARIABLE KOD INTEGER DEFAULT NULL;
DECLARE VARIABLE OSTATOK DOUBLE PRECISION DEFAULT NULL;
BEGIN
FOR
SELECT "kod", "ostatok"
FROM "B"
FOR UPDATE WITH LOCK
INTO: KOD, OSTATOK
DO
UPDATE "A"
SET "ostatok" = :OSTATOK
WHERE "kod" = :KOD;
END;
---
|
 |
Я когда то что то подобное решал решал с помощью insert,... 12.06.14 13:36
Автор: OlegY Статус: Незарегистрированный пользователь Отредактировано 12.06.14 13:40 Количество правок: 1
|
Я когда то что то подобное решал решал с помощью insert, старые значения прибивал delete.
Дело было примерно так: была таблица товаров product(productId,...,remain) - в remain - текущий остаток
И есть таблица остатков по сменам remain(id, session, productId,remain1, remain2) remain1, remain2 - остатки товаров соотв. на начало и на конец. Ну при открытии смены все просто было:
insert into remain(session, ProductId, remain1, remain2) select 12345, productId, remain, remain from product;
---
12345 - номер смены
То при закрытии мне нужно было обновить поле remain.remain2, делал как то так
1. insert into remain(session, ProductId, remain1, remain2) select 12346, p.productId, r.remain1, p.remain from product p, remain r where r.session = 12345 and p.productId = r.productId;
2. delete from remain where session = 12345;
3. update remain set session = 12345 where session = 12346;
---
Как то так, надеюсь.мысль понятна
|
 |
проще - не использовать две таблицы, а остановиться на одной. В результате получится первая нормальная форма - отсутствие дублирования данных. Конкретно по sql - не хочу учить плохому. 11.06.14 07:53
Автор: kstati <Евгений Борисов> Статус: Elderman Отредактировано 11.06.14 07:53 Количество правок: 1
|
|
 |  |
Просто есть большая таблица, выполняющая роль архива. А маленькая - постоянно обновляется. И нужно периодически их вместе сводить. Поэтому и есть эта задача. 11.06.14 08:04
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
|
|
|