Query update

di il
3 risposte

Query update

Salve sto convertendo il mio db access in postgres, ho una query di aggiornamento che non riesco a fare.

devo aggiornare i campi di una tabella  con un left join ad un'altra tabella in maniera che non trovi riscontro e una condizione where nella tabella da aggiornare

Questa è come l'ho tradotta io in postgres ma non mi funziona, penso ci sia un problema perchè la tabella proiez_righe compare due volte ed ho usato un alias

UPDATE bilancio.proiez_righe
SET codice_calcolo_anno = ‘A_04’
FROM bilancio.proiez_righe AS pr
LEFT JOIN
 bilancio.proiez_crediti_debiti AS pc ON pr.codice = pc.liv1 AND pr.azienda = pc.az
WHERE
 (pr.codice_calcolo_anno = 'A_07' OR pr.codice_calcolo_anno = 'A_08') AND pc.liv1 IS NULL;

la query in access era

UPDATE PROIEZ_RIGHE LEFT JOIN PROIEZ_CREDITI_DEBITI ON (PROIEZ_RIGHE.CODICE = PROIEZ_CREDITI_DEBITI.LIV1) AND (PROIEZ_RIGHE.AZIENDA = PROIEZ_CREDITI_DEBITI.AZ) SET PROIEZ_RIGHE.CODICE_CALCOLO_ANNO ="A_04"
WHERE (((PROIEZ_RIGHE.CODICE_CALCOLO_ANNO)="A_07" Or (PROIEZ_RIGHE.CODICE_CALCOLO_ANNO)="A_08") AND ((PROIEZ_CREDITI_DEBITI.LIV1) Is Null));

praticamente voglio che mi cambi il campo codice_calcolo_anno per tutte quelle righe che hanno  codice_calcolo_anno = 'A_07' OR codice_calcolo_anno = 'A_08' e che non trovano riscontro nella tabella proiez_crediti_debiti

Grazie

3 Risposte

  • Re: Query update

    Forse se metti nomi tabelle e relativi campi si può azzardare un suggerimento.

    Intanto:

    Update tabella

    Set campo = valore

    Where

    Quelcampo=quelvalore or quell'altrocampo=quell'altrovalore

    Perché usi le join? Deve pescare dati da altre tabelle? Quali?

  • Re: Query update

    Facciamo un esempio semplice:

    tabella a con campo chiave campo1a ed una altro campo di nome campo2

    tabella b con campo chiave campo1b

    voglio che faccia update nella tabella a settando campo2='y' se

    campo2='x'

    e se non trova nessun record nella tabella b con il join campo1a=campo1b 

  • Re: Query update

    Non so se la soluzione ti serve ancora, ma magari può aiutare qualcun altro…

    Per l'update che hai descritto, utilizzerei la condizione “NOT EXISTS”

    UPDATE a
    SET campo2 = 'y'
    WHERE campo2 = 'x'
      AND NOT EXISTS (
            SELECT 1
            FROM b
            WHERE a.campo1a = b.campo1b
          )	
Devi accedere o registrarti per scrivere nel forum
3 risposte