Udate Set Select

martedì 13 gennaio 2009 - 12.57

nuaz Profilo | Newbie

Ciao a tutti,

ho qualche problema nel fare una query che ha come scopo le cose seguenti:

tabella A, campi: ka,ca1,ca2 e diversi altri campi
tabella B, campi: fkba,cb1
tabella C, campi: fkca,cc1

tutte le tabelle sono popolate ovviamente.

quello che vorrei fare è:

- inserire tutti i valori della tabella B nel campo cb1 nella tabella A nel campo ca1 nelle entry dove ka=fkba
- inserire tutti i valori della tabella C nel campo cc1 nella tabella A nel campo ca2 nelle entry dove ka=fkca

ho provato una cosa del genere (senza successo):

update A set (ca1) = (select B.cb1 from B inner join A on B.fkba=A.k)

capisco che effettivamente la query non può funzionare xkè dovrei dirgli che deve aggiornare la tabella A solo nelle entry necessarie...

mi sono bloccato qui.

qualche aiuto ?

Grazie

Saluti

Alessandro

lbenaglia Profilo | Guru

>qualche aiuto ?

Ciao Alessandro,

Con quale DBMS stai lavorando?
Puoi postare i comandi DDL di CREATE TABLE di tutte le tabelle comprensivi di constraint, alcune righe di prova (INSERT INTO) ed il risultato finale che vorresti ottenere con quei dati?

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

nuaz Profilo | Newbie

allora, sto lavorando con mysql.

queste sono le tabelle (per la prima tabella tolgo un po di campi perchè sono tanti):

CREATE TABLE `quest_template` (
`entry` mediumint(8) unsigned NOT NULL DEFAULT '0',
`ZoneOrSort` smallint(6) NOT NULL DEFAULT '0',
`MinLevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
`QuestLevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
`PickupNpcId` mediumint(8) unsigned DEFAULT '0',
`PickupGOId` mediumint(8) unsigned DEFAULT '0',
`PickupItemId` mediumint(8) unsigned DEFAULT '0',
`TurninNpcId` mediumint(8) unsigned DEFAULT '0',
..... (altri campi)....
`PointY` float NOT NULL DEFAULT '0',
PRIMARY KEY (`entry`)
)

CREATE TABLE `creature_questrelation` (
`id` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Identifier',
`quest` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Quest Identifier',
PRIMARY KEY (`id`,`quest`)
)

CREATE TABLE `creature_involvedrelation` (
`id` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Identifier',
`quest` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Quest Identifier',
PRIMARY KEY (`id`,`quest`)
)

la tabella quest_template contiene migliaia di entry tutte con i campi PickupNpcId e TurninNpcId vuoti.
Il campo Id della tabella creature_questrelation corrisponde al campo PickupNpcId della tabella quest_template e il campo quest della tabella creature_questrelation è una FK del campo Entry (PK di quest_template); quindi vorrei che il campo PickupNpcId di quest_template sia aggiornato con i dati presenti in creature_questrelation.
Stesso identico discorso per la tabella creature_involvedrelation ma questa volta il campo in gioco nella tabella quest_template è TurninNpcId.

Grazie

lbenaglia Profilo | Guru

>allora, sto lavorando con mysql.
Purtroppo non conosco MySQL, ma in SQL Server adotterei una soluzione simile a:

UPDATE quest_template SET PickupNpcId = CQ.Id FROM quest_template AS QT INNER JOIN creature_questrelation AS CQ ON QT.Entry = CQ.quest; UPDATE quest_template SET TurninNpcId = CI.Id FROM quest_template AS QT INNER JOIN creature_involvedrelation AS CI ON QT.Entry = CI.quest;

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

nuaz Profilo | Newbie

grazie per la risposta.

ho provato ma temo che a mysql non piaccia molto la clausola from in un update; continua a darmi errore di sintassi.

lbenaglia Profilo | Guru

>ho provato ma temo che a mysql non piaccia molto la clausola
>from in un update; continua a darmi errore di sintassi.

Sul manuale vedo che la sintassi MySQL è leggermente diversa:
http://dev.mysql.com/doc/refman/5.0/en/update.html

Puoi adattare i miei due comandi in base al seguente esempio:

UPDATE items,month SET items.price=month.price WHERE items.id=month.id;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

nuaz Profilo | Newbie

funziona perfettamente :)

scusa se ho avuto la pigrizia di non andare a vedere sul manuale ma stavo facendo altri lavori in questi giorni.

grazie ancora

ciao

alessandro
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5