Tabuľka 1:
id name desc
-----------------------
1 a abc
2 b def
3 c adf
Tabuľka 2:
id name desc
-----------------------
1 x 123
2 y 345
Ako môžem v Oracle SQL spustiť sql update dotaz, ktorý môže aktualizovať tabuľku 1 s tabuľkou 2's name
a desc
pomocou rovnakého id
? Takže konečný výsledok, ktorý by som dostal, je
Tabuľka 1:
id name desc
-----------------------
1 x 123
2 y 345
3 c adf
Otázka je prevzatá z https://stackoverflow.com/questions/5036918/sql-update-query-with-data-from-another-table, ale konkrétne pre oracle SQL.
Toto sa nazýva korelovaná aktualizácia
UPDATE table1 t1
SET (name, desc) = (SELECT t2.name, t2.desc
FROM table2 t2
WHERE t1.id = t2.id)
WHERE EXISTS (
SELECT 1
FROM table2 t2
WHERE t1.id = t2.id )
Za predpokladu, že výsledkom spojenia je pohľad so zachovaným kľúčom, môžete tiež
UPDATE (SELECT t1.id,
t1.name name1,
t1.desc desc1,
t2.name name2,
t2.desc desc2
FROM table1 t1,
table2 t2
WHERE t1.id = t2.id)
SET name1 = name2,
desc1 = desc2
Tu sa zdá byť ešte lepšia odpoveď s klauzulou 'in', ktorá umožňuje viacero kľúčov pre spojenie:
update fp_active set STATE='E',
LAST_DATE_MAJ = sysdate where (client,code) in (select (client,code) from fp_detail
where valid = 1) ...
Celý príklad je tu: http://forums.devshed.com/oracle-development-96/how-to-update-from-two-tables-195893.html
Hovädzie mäso spočíva v tom, že stĺpce, ktoré chcete použiť ako kľúč, máte v zátvorkách v klauzule where pred 'in' a príkaz select s rovnakými názvami stĺpcov máte v zátvorkách. where (column1,column2) in ( select (column1,column2) from table where "the set I want" );