MySql: Aggiornare alcuni campi nella tabella A dalla Tabella B

di il
3 risposte

MySql: Aggiornare alcuni campi nella tabella A dalla Tabella B

Ciao a tutti,

ho cercato su diversi 3d senza mai trovare la soluzione definitiva nel poter aggiornare i campi di una tabella MySql, con una query, prelevandoli da un'altra.

Mi spiego meglio: ho 2 tabella: 

  • Tab A - tabella di origine:  progressivo (key), nome, status, aggiudicato
  • Tab B - tabella di destinazione:  id (key), progressivo, nome, status, aggiudicato

Quello che vorrei fare è, dopo aver aggiornato la Tab A, con una query che preleva i dati, aggiornare solo i campi status e aggiudicato della Tab B, identificando il nome come valore da identificare per l'aggiornamento.

Ho fatto una query seguendo alcuni spunti ma nulla!!! :(

Sql = "update tabB (status, aggiudicato) select (status, aggiudicato) where tabA"

**** anche se metto nome non funzione ****

set rs=conn.execute(Sql)

Mi continua a dare questo errore e non capisco:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51 Driver][mysqld-5.7.44-48-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( status, aggiudicato) select ( status, aggiudicato) where tabA' at line 1
/fantacalcio/tabA/alternative_session.asp, line 10

la line 10 corrisponde al comando di chiusura set rs=conn.execute(Sql).... le poche ferie fanno effetto e non ci arrivo proprio!!

Grazie in anticipo!!

Ciaooo

3 Risposte

  • Re: MySql: Aggiornare alcuni campi nella tabella A dalla Tabella B

    28/08/2025 - leftist ha scritto:

    Mi continua a dare questo errore e non capisco:

    Quel che ti frega (ed ha fregato pure me in passato) è pensare alla UPDATE come se assomigliasse ad una INSERT INTO.

    La SELECT non gli piace. Ecco perché l'eccezione ti dice proprio

    28/08/2025 - leftist ha scritto:

    You have an error in your SQL syntax;

    Per fare l'update partendo da altre tabelle, basta metterle in JOIN tra di loro. Vado a spanne, ma dovresti avere uno statement simile a

    UPDATE tabB AS B
    INNER JOIN tabA AS A ON B.progressivo = A.progressivo
    SET B.status = A.status, B.aggiudicato = A.aggiudicato

    In questo modo dovresti aggiornare in massa l'intera tabella B ogni volta. Puoi ovviamente renderla più efficiente impostando opportunamente la WHERE.

    Fai per bene il backup prima di provare. XD

  • Re: MySql: Aggiornare alcuni campi nella tabella A dalla Tabella B

    Funzionaaaa.... Sei un GRANDE!!!!

    Grazie 100000000 per l'aiuto!!!!

  • Re: MySql: Aggiornare alcuni campi nella tabella A dalla Tabella B

    Figurati! :)

    Tieni però conto di una cosa. Potresti risolvere molto più elegantemente con dei trigger (guadagnandone in efficienza perché non coinvolgi l'intera tabella)

    Anche se, magari per colpa dell'esempio giustamente minimale, sono perplesso sul perché ricopi dati in una tabella identica alla precedente. Se noti, tabB differisce da tabA solo per un'altra PK aggiuntiva. Risulta ridondante a vederla così. Se l'esempio è uguale invece alla tua situazione reale, potresti avere il DB non ben progettato. Prova a ragionare meglio sulla struttura.

Devi accedere o registrarti per scrivere nel forum
3 risposte