sql >> Databáze >  >> RDS >> Oracle

UPDATE se syntaxí JOIN pro Oracle Database

Syntaxe příkazu UPDATE je:

http://docs.oracle.com/cd/B19306_01 /server.102/b14200/statements_10007.htm

kde dml_table_expression_clause je:

Věnujte prosím pozornost ( subquery ) část výše uvedené syntaxe.

subquery je funkce, která umožňuje provádět aktualizaci spojení.

V nejjednodušší formě to může být:

UPDATE (
   subquery-with-a-join
)
SET cola=colb

Před aktualizací připojení musíte znát omezení uvedená zde:

https://docs.oracle.com/cd/B28359_01 /server.111/b28286/statements_8004.htm

  • Operátor množiny
  • DISTINCT operátor
  • Agregační nebo analytická funkce
  • klauzule GROUP BY, ORDER BY, MODEL, CONNECT BY nebo START WITH
  • Výraz kolekce v seznamu SELECT
  • Poddotaz v seznamu SELECT
  • Poddotaz označený POUZE PRO ČTENÍ
  • Připojuje se, až na některé výjimky, jak je zdokumentováno v Příručce správce databáze Oracle

a také společná pravidla související s aktualizovatelnými pohledy – zde (sekce:Updating a Join View ):
http://docs .oracle.com/cd/B19306_01/server.102/b14231/views.htm#sthref3055

Nejprve můžeme vytvořit poddotaz se spojením:

SELECT age 
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'

Tento dotaz jednoduše vrátí následující výsledek:

       AGE
----------
        30

a nyní se můžeme pokusit aktualizovat náš dotaz:

UPDATE (
    SELECT age 
    FROM ages a
    JOIN names m ON a.id = m.id
    WHERE m.name = 'Sally'
)
SET age = age + 1;

ale dostaneme chybu:

Tato chyba znamená, že není splněno jedno z výše uvedených omezení (tabulka se zachovalými klíči).

Pokud však do našich tabulek přidáme primární klíče:

alter table names add primary key( id );
alter table ages add primary key( id );

pak nyní aktualizace funguje bez jakékoli chyby a konečný výsledek je:

select * from ages;

        ID        AGE
---------- ----------
         1         25
         2         31
         3         35



  1. Dotaz MySQL s podmíněným příkazem?

  2. Chcete uložit objekt do databáze MySQL

  3. Používání Oracle EXPAND_SQL_TEXT

  4. Jak zacházet se starší databází v rámci Django