Как обновить записи, используя выбранные записи из той же таблицы - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть следующий пример таблицы

Mat_ID     Prod_ID     QTY
--------------------------
100        20          50
101        20          60
100        21          0
101        21          2
100        22          0
101        22          1
101        23          8

Я хочу обновить QTY всех Prod_ID! = 20 с помощью QTY Prod_ID 20 с тем же Mat_ID.

Так что для моегоНапример, таблица должна быть такой, я выполняю запрос.

Mat_ID     Prod_ID     QTY
--------------------------
100        20          50
101        20          60
100        21          50
101        21          60
100        22          50
101        22          60
101        23          60

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

Вы можете попробовать ниже -

UPDATE t SET t.QTY= (SELECT t1.QTY
                                  FROM t1
                                  WHERE t1.mat_id = t.mat_id and t1.Prod_ID=20)
WHERE t.Prod_ID!=20
0 голосов
/ 30 сентября 2019

Вы можете использовать слияние для него следующим образом:

SQL> create table my_tab as
  2  SELECT 100 as Mat_ID, 20 as Prod_ID , 50 as QTY from dual union all
  3  SELECT 101, 20, 60 from dual union all
  4  SELECT 100, 21, 0  from dual union all
  5  SELECT 101, 21, 2  from dual union all
  6  SELECT 100, 22, 0  from dual union all
  7  SELECT 101, 22, 1  from dual union all
  8  SELECT 101, 23, 8  from dual ;

Table created.

SQL> merge into my_tab m
  2  using (select * from my_tab
  3  where PROD_ID = 20) t
  4  on (m.Mat_ID = t.Mat_ID and m.PROD_ID <> 20)
  5  when matched then
  6  update set m.QTY = t.qty;

5 rows merged.

SQL> select * from my_tab;

    MAT_ID    PROD_ID        QTY
---------- ---------- ----------
       100         20         50
       101         20         60
       100         21         50
       101         21         60
       100         22         50
       101         22         60
       101         23         60

7 rows selected.

SQL>

Ура !!

0 голосов
/ 30 сентября 2019

Вы можете использовать update. Вот метод, использующий коррелированный подзапрос:

update t
    set qty = (select t2.qty
               from t t2
               where t2.mat_id = t.mat_id and
                     t2.prod_id = 20
              )
    where prod_id <> 20;

Примечание: это предполагает, что у вас есть ровно одна строка для каждого mat_id для prod_id = 20. Если у вас может быть несколько строк, вы можете использовать агрегирование в подзапросе:

update t
    set qty = (select sum(t2.qty)
               from t t2
               where t2.mat_id = t.mat_id and 
                     t2.prod_id = 20
              )
    where prod_id <> 20;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...