[MySQL] SQL UPDATE INNER JOIN

Rick

Nuovo Utente
7 Feb 2017
4
0
1
Ciao a tutti,

ho un db con due semplici tabelle, composte dai seguenti campi:

Tabella a : ID, FLAG
Tabella b : ID, ID_A, FLAG

Chiaramente i campi ID sono autoincrement, i FLAG sono dei boolean, mentre ID_A è un intero. Il rapporto tra le due è di 1 record per A e 4 record per B, relazionati tra loro tramite il campo ID_A della tabella B legato al campi ID della tabella A.

Ho la necessità di aggiornare i campi FLAG delle due tabelle contemporaneamente, ed ho trovato due soluzioni, volevo sapere quale secondo voi è la migliore, o se ce ne sono altre più funzionali:

1) "UPDATE a INNER JOIN b ON b.ID_A = a.ID SET a.FLAG = FALSE, b.FLAG = FALSE WHERE a.ID = 1"
Faccio tutto con una query ma il valore a.FLAG viene scritto 4 volte inutilmente (o sbaglio?)

2) "UPDATE a SET a.FLAG = FALSE WHERE a.ID = 1"
"UPDATE b INNER JOIN a ON b.ID_A = a.ID SET b.FLAG = FALSE WHERE a.ID = 1"
Doppia query ma scrittura mirata nelle due tabelle

Cosa ne pensate ?

grazie

Riccardo
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
proverei così,
PHP:
UPDATE b, a SET a.flag=false, b.flag=false WHERE b.id_a=a.id AND a.id = 1234

oppure

UPDATE a SET flag=false WHERE id = 1234; UPDATE b SET flag=false WHERE id_a = 1234;
con l'attenzione che la colonna id_a nella tabella b sia indicizzata altrimenti hai operazioni sequenziali che comportano la lettura dell'intera tabella, in qualunque forma tu scriva le query
(qualche volta anche le join rendono la lettura sequenziale, dove posso le evito)

la seconda soluzione potrebbe comunque stare in un unico comando

(ps, non le ho provate, non avendo mysql, la prima soluzione non è garantita)
 

Rick

Nuovo Utente
7 Feb 2017
4
0
1
Ciao, interessante la prima, differenze funzionali rispetto all'uso di inner join?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
la inner join consente l'aggiornamento degli elementi presenti contemporaneamente sia nella tabella a che nella b
lo stesso risultato dovrebbe darlo anche la query senza la inner join perché non è soddisfatta la condizione
b.id_a=a.id
uno dei due è null, evita però la join

ci sarebbe anche la soluzione di creare una view e poi aggiornare la "tabella" risultante, ma la tabella risultante deve contenere tutte le colonne da aggiornare

inutile parlare di tempi di esecuzione su aggiornamenti così "contenuti"
 

Rick

Nuovo Utente
7 Feb 2017
4
0
1
Infatti la mia è più una curiosità sulla filosofia da applicare, a livello di query sto su una al minuto, lentissimo penso per un motore SQL. Invece devo approfondire la questione dell'indicizzazione, ho varie tabelle con il campo che referenzia altri indici di tabelle, ho letto qualcosa al riguardo su un discorso di prestazioni migliori, anche se il mio db è abbastanza piccolo. Grazie mille per le risposte!
 
Discussioni simili
Autore Titolo Forum Risposte Data
WebmasterFioriniAndrea [MySQL] sql attributi con nome uguale MySQL 0
D [MySQL] [PHP] SQL andare da capo MySQL 0
M [MySQL] CREARE UN LINK SU UN DETERMINATO CAMPO DI UNA TABELLA RISULTATO DI UNA QUERY SQL MySQL 3
P [MySQL] MODELLO ER, XAMPP E HEIDI SQL MySQL 0
V [MySQL] You have an error in your SQL syntax MySQL 1
G [MySQL] Errore importazione tabella .sql #1062 - Duplicate entry '592' for key 'PRIMARY' MySQL 20
daniele8808 [MySQL] SQL SELECT restituisce più valori del dovuto MySQL 2
A [MySQL] tabelle sql MySQL 2
A [MySQL] SQL Offerte e Richieste di Lavoro e/o Collaborazione 12
P Hosting con SQL Server o MySql accessibile da remoto Hosting 6
F mysql e MS sql server: cosa cambia? MySQL 1
N [collaborazione] programmatore php/mysql asp/sql server Rovigo, Mantova, Ferrara Offerte e Richieste di Lavoro e/o Collaborazione 2
S Aiuto per mysql e ms sql MySQL 0
N SQL o MySQL... Database 2
K form Inserimento record mysql PHP 2
P Mysql lento a cancellare MySQL 1
P Codifica caratteri speciali mysql php PHP 0
N MAX() + ADD_DATE - per update su Mysql MySQL 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
W MySQL ciclo in SELECT MySQL 0
L Mysql gestionale multipiattaforma MySQL 0
W MySQL SELECT list dinamica MySQL 0
M utilizzo mysql in nodejs - crea createdAt e updateAt MySQL 1
T colonne di tabelle mysql ordinate MySQL 0
M Sintassi "personalizzata" per mysql workbench? MySQL 0
A Mysql MySQL 0
F Ricreare struttura php+mysql su Xampp Apache 0
M Array associativi php su 2 campi mysql PHP 10
Z Controllo giorni MYSQL PHP 0
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
L Mysql: Nascondere le pagine dopo una ricerca PHP 1
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
S problema con recupero dati tabella mysql PHP 2
E Progressbar estrazione dati da tabella mySQL Ajax 9
Z MySql injection PHP PHP 1
D controllare valore in tabella mysql PHP 0
A pulsante di update campo mysql con javascript Javascript 2
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
T differenza fra mysql xampp e un mysql server Database 0
R Importazione csv su mysql tramite array PHP 2
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
D problema php mysql PHP 1
D problema php mysql PHP 1
N Server mysql non raggiungibile da connessione esterna MySQL 1
B Crea pdf da tabella mysql "ultima riga modificata" MySQL 4
D evitare di inserirre duplicati in mysql PHP 4

Discussioni simili