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

Я хотел бы обновить, вставить и удалить записи из записей той же таблицы.

Пример таблицы

Mat_ID   Prod_ID   QTY
----------------------
100      20        50
101      20        60
102      20        50
100      21        0
102      21        0
100      22        10
103      22        20

Для приведенной выше таблицы я хотел бы обновить все QTY извсе Mat_ID с Prod_ID! = 20. Одновременно вставьте все Mat_ID из Prod_ID 20 во все Prod_ID, которые не имеют Mat_ID. То же самое с удалением. Удалить все Mat_ID, кроме Prod_ID 20.

Вывод

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

Это дополнение к моему предыдущему вопросу

1 Ответ

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

Вы можете получить несовпадающие значения, используя cross join для генерации строк, а затем left join или аналогичный механизм для фильтрации существующих значений. Полная таблица будет выглядеть так:

select m.mat_id, p.prod_id, m.qty
from (select distinct mat_id, qty
      from t
      where prod_id = 20
     ) m cross join
     (select distinct prod_id
      from t
     ) p ;

Это, вероятно, самый простой способ создать нужную таблицу. Но если вы хотите вставить пропущенные строки (ваш фактический вопрос):

select m.mat_id, p.prod_id, m.qty
from (select distinct mat_id, qty
      from t
      where prod_id = 20
     ) m cross join
     (select distinct prod_id
      from t
     ) p left join
     t
     on t.mat_id = m.mat_id and t.prod_id = p.prod_id
where t.mat_id is null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...