Обновить таблицу на основе значений из другой таблицы - PullRequest
0 голосов
/ 31 августа 2018

Это довольно просто, я хочу обновить таблицу, но только если выполняется условие в другой таблице. Запрос, который у меня сейчас есть:

UPDATE Table1
SET Table1.value='1234'
WHERE   ID IN 
(   
  (A sub query returning all the id's needed) 
)

Этот тип работает, но он обновляет многие значения. Проблема в том, что существует второе условие, а именно:

AND Table2.value = 'Pudding'

Но, увидев, что это другая таблица, она не работает. И я не знаю, как присоединиться к нему в Oracle. Посмотрел другие посты, но они, похоже, не относятся к моей конкретной проблеме. Попытка добавления предложения From с объединениями, которые я также использую в подзапросе, но не могу найти здесь, чтобы вставить его в оператор обновления в oracle.

Редактировать: Пример базы данных

Table1

ID    Key1     Key2     Value
1    A1       B1       345
2    A1       B2       75
3    A2       B1       45 

Table2

Key1     Key2     Value
A1       B1       'Pudding'
A1       B2       'Pudding'
A2       B1       'Something else' 

И да, Table2 также является частью подзапроса, как и 6 других таблиц. Я считаю, что перечисление всей структуры подзапроса будет только более запутанным, поскольку все, что он делает, возвращает серию идентификаторов, которые уже работают нормально.

Но в результате первые две строки в примере должны быть обновлены.

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете попытаться использовать существует с подобным подзапросом, потому что в таблицах нужно сравнивать два столбца.

UPDATE Table1 t1
SET t1.Value = '1234'
WHERE t1.ID IN 
    (   
      --(A sub query returning all the id's needed) 
    ) 
and 
    exists (
     select 1 
     from Table2 t2
     where t1.Key2 =t2.Key2 and t1.Key1 =t2.Key1 and t2.Value = 'Pudding'
    )

Вот образец

CREATE TABLE Table1(
  ID INT,
  Key1 VARCHAR(50),
  Key2 VARCHAR(50),
  Value VARCHAR(50)
);

INSERT INTO Table1 VALUES (1,'A1','B1','345');
INSERT INTO Table1 VALUES (2,'A1','B2','75');
INSERT INTO Table1 VALUES (3,'A2','B1','45');

CREATE TABLE Table2(
  Key1 VARCHAR(50),
  Key2 VARCHAR(50),
  Value VARCHAR(50)
);

INSERT INTO Table2 VALUES ('A1','B1','Pudding'); 
INSERT INTO Table2 VALUES ('A1','B2','Pudding'); 
INSERT INTO Table2 VALUES ('A2','B1','Something else'); 

UPDATE Table1 t1
SET t1.Value = '1234'
WHERE  exists (
 select 1 
 from Table2 t2
 where t1.Key2 =t2.Key2 and t1.Key1 =t2.Key1 and t2.Value = 'Pudding'
)

Запрос 1 :

select * from Table1

Результаты

| ID | KEY1 | KEY2 | VALUE |
|----|------|------|-------|
|  1 |   A1 |   B1 |  1234 |
|  2 |   A1 |   B2 |  1234 |
|  3 |   A2 |   B1 |    45 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...