salve,
miruss2 wrote:
Salve,
volevo sapere, cortesemente, se l'istruzione sql sotto riportata è giusta. in pratica devo assegnare al campo C1 (tabella T1) il valore "2" nei record in cui il campo D4 è uguale a "44" MA ANCHE E SOLO se il valore del campo C2 (tabella 1) è uguale a quello del campo C3 della tabella T2 e che abbia il valore del campo C4 uguale a "44")
UPDATE T1
SET C1 = 2
WHERE D4 = 44 AND C2 IN ( SELECT C3
FROM T2
WHERE C4 = 44)
grazie , immensamente, per l'aiuto
se ho compreso, potresti scrivere
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t1 (
Id int,
c1 int,
c2 int,
d4 int
);
CREATE TABLE dbo.t2 (
Id int,
c3 int,
c4 int
);
GO
INSERT INTO dbo.t2 VALUES ( 1, 1, 0 ); --no
INSERT INTO dbo.t2 VALUES ( 2, 2, 44 ); --si
INSERT INTO dbo.t2 VALUES ( 3, 3, 44 ); --si
INSERT INTO dbo.t1 VALUES ( 1, 0, 0, 0 ); --no
INSERT INTO dbo.t1 VALUES ( 2, 0, 1, 44 ); --no
INSERT INTO dbo.t1 VALUES ( 3, 0, 2, 0 ); --no
INSERT INTO dbo.t1 VALUES ( 4, 0, 2, 44 ); --si
INSERT INTO dbo.t1 VALUES ( 5, 0, 3, 44 ); --si
INSERT INTO dbo.t1 VALUES ( 6, 0, 3, 44 ); --si
GO
SELECT * FROM dbo.t1;
UPDATE dbo.t1
SET c1 = 2
FROM dbo.t1 t1
JOIN dbo.t2 t2
ON t1.c2 = t2.c3
AND ( t1.d4 = 44 AND t2.c4 = 44);
SELECT * FROM dbo.t1;
GO
DROP TABLE dbo.t1, dbo.t2;
--<-------
Id c1 c2 d4
---------
---------
---------
-----------
1 0 0 0
2 0 1 44
3 0 2 0
4 0 2 44
5 0 3 44
6 0 3 44
Id c1 c2 d4
---------
---------
---------
-----------
1 0 0 0
2 0 1 44
3 0 2 0
4 2 2 44
5 2 3 44
6 2 3 44
dove l'estensione FROM dell'istruzione UPDATE ti consente di ritornare (per l'esecuzione dell'aggiornamento) il solo set di dati giustificato nella join a te interessante, cioe' {ON t1.c2 = t2.c3 AND ( t1.d4 = 44 AND t2.c4 = 44)}
saluti