/ / Jak dokonać aktualizacji za pomocą wewnętrznego sprzężenia w Oracle - sql, oracle

Jak dokonać aktualizacji za pomocą wewnętrznego sprzężenia w Oracle - sql, oracle

Czy ktoś mógłby sprawdzić, czy sprzężenie wewnętrzne jest poprawne z instrukcją UPDATE w PL SQL? na przykład

Update table t
set t.value="value"
from tableb b inner join
on t.id=b.id
inner join tablec c on
c.id=b.id
inner join tabled d on
d.id=c.id
where d.key=1

Odpowiedzi:

15 dla odpowiedzi № 1

Ten synthax nie działa w Oracle SQL.

W Oracle można czasami zaktualizować join, jeśli tabele są "zachowane na klucz", tj .:

UPDATE (SELECT a.val_a, b.val_b
FROM table a
JOIN table b ON a.b_pk = b.b_pk)
SET val_a = val_b

Przy założeniu, że b_pk jest kluczem podstawowym b, tutaj łączenie jest możliwe do aktualizacji, ponieważ dla każdego wiersza A istnieje najbardziej jeden wiersz z B, dlatego aktualizacja jest deterministyczna.

W twoim przypadku, ponieważ zaktualizowana wartość nie jest zależna od innej tabeli, możesz użyć prostej aktualizacji z warunkiem EXIST, coś takiego:

UPDATE mytable t
SET t.VALUE = "value"
WHERE EXISTS
(SELECT NULL
FROM tableb b
INNER JOIN tablec c ON c.id = b.id
INNER JOIN tabled d ON d.id = c.id
WHERE t.id = b.id
AND d.key = 1)

1 dla odpowiedzi nr 2
update t T
set T.value = "value"
where T.id in (select id from t T2, b B, c C, d D
where T2.id=B.id and B.id=C.id and C.id=D.id and D.key=1)

-- t is the table name, T is the variable used to reffer to this table