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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
проще - не использовать две таблицы, а остановиться на одной. В результате получится первая нормальная форма - отсутствие дублирования данных. Конкретно по sql - не хочу учить плохому. 11.06.14 07:53  Число просмотров: 2947
Автор: kstati <Евгений Борисов> Статус: Elderman
Отредактировано 11.06.14 07:53  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
<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: 1 s   Design: Vadim Derkach