Domanda veloce

mercoledì 04 gennaio 2006 - 16.39

lordwaizard Profilo | Senior Member

Come posso aggiornare una riga prendendo il valore da un'altra tabella?
ES:

Tabella1
Codice(int)
QTA(int)


Tabella 2
Codice(int)
Dati (int)
QTA (int)

Dovrei sviluppare il seguente codice:
UPDATE tabella2 SET qta = TABELLA1.qta WHERE codice = '3'

Ovviamente TABELLA1.qta non funziona come posso risolvere il problema?
Grazie e scusate per la domanda banale.
Saluti
Davide

lbenaglia Profilo | Guru

> Come posso aggiornare una riga prendendo il valore da un'altra tabella?

Ciao lordwaizard,

credo che un esempio valga più di 1000 parole :-)

USE tempdb;
GO

/* Definisco la tabella di dbo.Tabella1 */
CREATE TABLE dbo.Tabella1(
Codice int NOT NULL PRIMARY KEY,
QTA int NOT NULL
);
GO

/* Definisco la tabella di dbo.Tabella2 */
CREATE TABLE dbo.Tabella2(
Codice int NOT NULL PRIMARY KEY,
Dati int NOT NULL,
QTA int NOT NULL
);
GO

/* Le popolo */
INSERT dbo.Tabella1 VALUES(1, 10);
INSERT dbo.Tabella1 VALUES(2, 20);
INSERT dbo.Tabella1 VALUES(3, 30);

INSERT dbo.Tabella2 VALUES(1, 100, 0);
INSERT dbo.Tabella2 VALUES(2, 200, 0);
INSERT dbo.Tabella2 VALUES(3, 300, 0);
INSERT dbo.Tabella2 VALUES(4, 400, 0);
GO

/* Aggiorno la Tabella 2 valorizzando la colonna quantità
** con i corrispondenti valori di Tabella 1 per il codice 1
*/
UPDATE dbo.Tabella2
SET QTA = T1.QTA
FROM dbo.Tabella1 AS T1 JOIN dbo.Tabella2 AS T2
ON T1.Codice = T2.Codice
WHERE T1.Codice = 1;
GO

/* Vediamo */
SELECT *
FROM dbo.Tabella2;
GO

/* Output:

Codice Dati QTA
----------- ----------- -----------
1 100 10
2 200 0
3 300 0
4 400 0

(4 row(s) affected)

*/

/* Se voglio posso aggiornare tutte le righe in una "botta" sola */
UPDATE dbo.Tabella2
SET QTA = T1.QTA
FROM dbo.Tabella1 AS T1 JOIN dbo.Tabella2 AS T2
ON T1.Codice = T2.Codice;
GO

/* Vediamo */
SELECT *
FROM dbo.Tabella2;
GO

/* Output:

Codice Dati QTA
----------- ----------- -----------
1 100 10
2 200 20
3 300 30
4 400 0

(4 row(s) affected)

*/

/* Pulizia */
DROP TABLE dbo.Tabella1, dbo.Tabella2;


Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5