T1.LEID необходимо ОБНОВИТЬСЯ с значениями T1.ID от Строки, в которых совпадают как MSID, так и ESTID.Oracle 11g - Обновление сопоставленных строк со значениями из исходной таблицы
Я поворачивал мой синтаксис вокруг и попробовал несколько вариантов, но всегда в конечном итоге с той же ошибкой 01427.
UPDATE T1
SET LEID = (SELECT T2.id
FROM T2
WHERE T2.MSID = T1.MSID)
WHERE EXISTS (SELECT T2.id
FROM T2
WHERE T2.ESTID = T1.ESTID
);
ORA-01427: single-row subquery returns more than one row
{ CREATE TABLE T1
(
{
ESTID NUMBER(8),
MSID NUMBER(8),
SMID NUMBER(8),
LEID NUMBER(8)
)
NOLOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(545, 5454, 888, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(334, 5555, 6541, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(254, 4487, 888, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(659, 54518, 654, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(854, 8548, 85478, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(658, 12485, 254, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(444, 5555, 888, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(444, 5545, 888, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(444, 4444, 888, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(555, 5555, 999, NULL);
Insert into T1
(ESTID, MSID, SMID, LEID)
Values
(444, 3333, 5, NULL);
COMMIT; }
CREATE TABLE T2
(
ESTID NUMBER(8),
MSID NUMBER(8),
ID NUMBER(8)
)
NOLOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING; }
Insert into T2
{(ESTID, MSID, ID)
Values
(545, 5454, 14);
Insert into T2
(ESTID, MSID, ID)
Values
(334, 5555, 16);
Insert into T2
(ESTID, MSID, ID)
Values
(254, 4487, 18);
Insert into T2
(ESTID, MSID, ID)
Values
(659, 54518, 20);
Insert into T2
(ESTID, MSID, ID)
Values
(854, 8548, 22);
Insert into T2
(ESTID, MSID, ID)
Values
(658, 12485, 24);
Insert into T2
(ESTID, MSID, ID)
Values
(444, 5555, 26);
Insert into T2
(ESTID, MSID, ID)
Values
(444, 5545, 28);
Insert into T2
(ESTID, MSID, ID)
Values
(444, 4444, 30);
Insert into T2
(ESTID, MSID, ID)
Values
(555, 5555, 32);
Insert into T2
(ESTID, MSID, ID)
Values
(444, 3333, 34);
COMMIT; }
бы признателен за любую помощь или предложения о том, как изменить scriupt топ обновления на ropws в T1.
Если таблицы больше, я бы использовал команду слияния: 'MERGE INTO T1 ИСПОЛЬЗОВАНИЕ T2 ON (T2.MSID = T1.MSID AND T2.ESTID = T1.ESTID) КОГДА СООТВЕТСТВУЕТ ТОГДА UPDATE SET LEID = T2 .ID; ' –
Оба подхода будут работать только в том случае, если (MSID, ESTID) уникален в таблице T2, например, защищен уникальным ограничением' ALTER TABLE T2 ADD CONSTRAINT T2_UQ UNIQUE (MSID, ESTID); ' –
Я был уверен, что у меня было пробовал это, но не смог найти в моей истории травм, и он, конечно, обновляет строки в образце. В больших таблицах, все еще опасаясь 1427 ... нужны ли ограничения, или будет ли тот факт, что они уникальны? Сейчас я думаю, что в больших таблицах они действительно не уникальны. Спасибо вам за ваш вклад. –