sql >> Database teknologi >  >> RDS >> Oracle

OPDATERING med JOIN-syntaks til Oracle Database

Syntaksen for UPDATE-sætningen er:

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

hvor dml_table_expression_clause er:

Vær opmærksom på ( subquery ) del af ovenstående syntaks.

subquery er en funktion, der gør det muligt at udføre en opdatering af joinforbindelser.

I den mest simple form kan det være:

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

Før du opdaterer et medlemskab, skal du kende de begrænsninger, der er angivet her:

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

  • En sæt-operator
  • EN DISTINKT operator
  • En aggregeret eller analytisk funktion
  • EN GROUP BY, ORDER BY, MODEL, CONNECT BY eller START WITH-klausul
  • Et samlingsudtryk i en SELECT-liste
  • En underforespørgsel i en SELECT-liste
  • En underforespørgsel, der er angivet MED SKRIVEKUN
  • Tilslutter sig, med nogle undtagelser, som dokumenteret i Oracle Database Administrator's Guide

og også almindelige regler relateret til opdaterbare visninger - her (afsnit:Updating a Join View ):
http://docs .oracle.com/cd/B19306_01/server.102/b14231/views.htm#sthref3055

Vi kan først oprette en underforespørgsel med et join:

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

Denne forespørgsel returnerer blot følgende resultat:

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

og nu kan vi prøve at opdatere vores forespørgsel:

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

men vi får en fejl:

Denne fejl betyder, at en af ​​ovenstående begrænsninger ikke er opfyldt (nøglebevaret tabel).

Men hvis vi tilføjer primærnøgler til vores tabeller:

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

så fungerer opdateringen nu uden fejl, og et endeligt resultat er:

select * from ages;

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



  1. Får mærkeligt problem med TO_NUMBER-funktionen i Oracle

  2. Laravel 4:multiplum hvor med eller i veltalende

  3. VIS DATABASER Tilsvarende i SQL Server – sp_databaser

  4. Laravel 5 Veltalende:Hvordan får man rå sql, der bliver udført? (med bundne data)