sql >> Database >  >> RDS >> Oracle

UPDATE met JOIN-syntaxis voor Oracle Database

De syntaxis van het UPDATE-statement is:

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

waar dml_table_expression_clause is:

Let op ( subquery ) onderdeel van de bovenstaande syntaxis.

De subquery is een functie die het mogelijk maakt om een ​​update van joins uit te voeren.

In de meest eenvoudige vorm kan het zijn:

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

Voordat je een join bijwerkt, moet je de beperkingen kennen die hier worden vermeld:

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

  • Een set-operator
  • EEN DISTINCT-operator
  • Een geaggregeerde of analytische functie
  • Een clausule GROUP BY, ORDER BY, MODEL, CONNECT BY of START WITH
  • Een collectie-uitdrukking in een SELECT-lijst
  • Een subquery in een SELECT-lijst
  • Een subquery aangeduid MET ALLEEN LEZEN
  • Wordt lid, met enkele uitzonderingen, zoals beschreven in de Oracle Database Administrator's Guide

en ook algemene regels met betrekking tot bij te werken weergaven - hier (sectie:Updating a Join View ):
http://docs .oracle.com/cd/B19306_01/server.102/b14231/views.htm#sthref3055

We kunnen eerst een subquery maken met een join:

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

Deze zoekopdracht geeft eenvoudig het volgende resultaat:

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

en nu kunnen we proberen onze vraag bij te werken:

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

maar we krijgen een foutmelding:

Deze fout betekent dat aan een van de bovenstaande beperkingen niet wordt voldaan (tabel met bewaarde sleutel).

Als we echter primaire sleutels aan onze tabellen toevoegen:

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

dan werkt de update nu foutloos en het uiteindelijke resultaat is:

select * from ages;

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



  1. Hoe kan ik een SQL-query schrijven om het aantal verkochte componenten met hun bovenliggende assemblages te berekenen? (Postgres 11/recursieve CTE?)

  2. Script verwijderen SQL Server 2008

  3. Hoe verplaats ik een tabel naar een schema in T-SQL

  4. PyMySQL-variabelen in query's