Обновление SQL с объединениями - PullRequest
1 голос
/ 24 июня 2011

У меня есть данные table1.fieldToChange , которые в настоящее время заполняются из table2.oldData ... но я хотел бы обновить это и изменить его на table2.newData

Вот код, который я использую, чтобы добиться этого:

UPDATE table1
SET table1.fieldToChange =
  (SELECT table2.newData
  FROM table2
  WHERE table2.oldData = table1.newData
  ) ;

Но я получаю ошибку «ORA-01427».

Оба table2.newData и table2.oldData являются уникальными идентификаторами и используются только один раз в базе данных. Любая помощь будет высоко ценится!

Спасибо

Ответы [ 4 ]

1 голос
/ 24 июня 2011

Разве вы не имеете в виду?

UPDATE table1
SET fieldToChange =
  (SELECT table2.newData
  FROM table2
  WHERE table2.oldData = table1.fieldToChange     ---- and NOT table1.newData ?
  ) ;
1 голос
/ 24 июня 2011

ORA-01427 указывает, что вы возвращаете более одного значения в подзапросе. Измените запрос так, чтобы он содержал предложение DISTINCT или какой-либо другой механизм уникальной идентификации строки в подзапросе.

UPDATE table1
SET table1.fieldToChange =
  (SELECT DISTINCT table2.newData
  FROM table2
  WHERE table2.oldData = table1.newData
  ) ;
1 голос
/ 24 июня 2011

попробуйте с оператором MERGE :

MERGE INTO table1 tgt
USING (SELECT newData,oldData 
         FROM table2
        WHERE table2.oldData = table1.newData) src
ON (src.oldData = tgt.newData)
WHEN MATCHED THEN
  UPDATE SET tgt.fieldToChange = src.newData;
0 голосов
/ 24 июня 2011

Не уверен, что это работает в Oracle, но в MS SQL вы можете сделать это:

UPDATE table1
SET fieldToChange = table2.newData
FROM table2  
WHERE table2.oldData = fieldToChange

Обратите внимание, что у вас не может быть псевдонима в обновляемой таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...