update e subquery

Poiché nel mio database ho una tabella molto grande che aggiorno continuamente con dati prelevati dal web non omogenei vorrei cercare di normalizzarla sostituendo alcuni campi con quelli presenti in unaltra tabella nella quale i dati sono esatti.Ma

Ho provato con

<?php

$query = "UPDATE gare SET categoria = (select distinct(categ) from atl_corrilab where cognome =nom)

";

?>

che mi restituisce

Errore nella query:Subquery returns more than 1 row

Lerrore segnalatomi è strano in quanto io voglio proprio che la subquery mi restituisca più righe volendo sostituire alcune righe del campo categoria della tab gare con le righe della tab atl_corrilab dove è verificata la condizione. La cosa strana è che eseguendo lUPDATE su un altro campo dalla tabella gare lo script ha funzionato anche se dove non ha trovato corrispondenze ha cancellato il contenuto del campo.

La subquery presa separatamente mi da errore perché il campo cognome appartiene alla tabella gare.Ho provato a modificare cosi:

<?php

$query = "UPDATE gare SET categoria = (SELECT distinct(categ) from atl_corrilab )where gare.cognome =(SELECT nom from atl_corrilab )

";

?>

Non ottengo errori ma lUPDATE non viene eseguito.

Ho provato con

<?php

$query = "UPDATE gare,atl_corrilab SET categoria =REPLACE(categoria,(SELECT distinct(categoria) from  gare ),(SELECT distinct(categ) from  atl_corrilab )) where gare.cognome =atl_corrilab.nom

 ";

?>

Ma ottengo

You can't specify target table 'gare' for update in FROM clause.

Come potrei fare?Grazie

inviato 8 anni fa
lucignolo
X 0 X

riporta la struttura delle 2 tabelle e spiegaci quale campo vuoi riportare da una tabella all'altra e secondo quale criterio

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

tabella gare

Campo   Tipo   Null   Predefinito

id   int(10)   Sì   NULL

cognome   varchar(50)   Sì   

categoria   varchar(20)   Sì   

tabella atl_corrilab

Campo   Tipo   Null   Predefinito

id_corri   int(10)   Sì   NULL

pr   varchar(100)   Sì   

nom   varchar(250)   Sì   

categ   varchar(20)   Sì   

soc   varchar(250)   Sì   

Vorrei eseguire un Update in modo che tutte le righe del campo categoria di gare vengano rimpiazzate dalle righe del campo categ della tabella atl_corrilab condizione  cognome=nom

Grazie

risposto 8 anni fa
lucignolo
X 0 X

Perdona il ritardo con cui ti rispondo. Hai già risolto? Altrimenti do un'occhiata.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

si grazie lo stesso ho già risolto.

risposto 8 anni fa
lucignolo
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda