информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыSpanning Tree Protocol: недокументированное применениеЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
какой сервер rdbms? 25.06.14 00:15  Число просмотров: 4153
Автор: Den <Denis> Статус: 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;

---
<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 <Denis> Статус: 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 <Oleg Yurchenko> Статус: Registered
Отредактировано 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
<"чистая" ссылка> <обсуждение закрыто>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach