Sehen Sie, wenn diese ...
-- some test data...
IF OBJECT_ID('tempdb..#TableA', 'U') IS NOT NULL
DROP TABLE #TableA;
CREATE TABLE #TableA (
UserID INT NOT NULL,
PlanName VARCHAR(5) NOT NULL,
SomeDate DATE NULL,
PRIMARY KEY CLUSTERED (UserID)
);
IF OBJECT_ID('tempdb..#TableB', 'U') IS NOT NULL
DROP TABLE #TableB;
CREATE TABLE #TableB (
UserID INT NOT NULL,
PlanName VARCHAR(5) NOT NULL,
PRIMARY KEY CLUSTERED (UserID, PlanName)
);
INSERT #TableA (UserID, PlanName) VALUES
(1, 'aaa'), (2, 'aab'), (3, 'abb'),
(4, 'aaa'), (5, 'aab'), (6, 'ccc');
INSERT #TableB (UserID, PlanName) VALUES
(1, 'aaa'), (1, 'abb'), (1, 'bbb'),
(2, 'aaa'), (2, 'abb'), (2, 'bbb'),
(3, 'aaa'), (3, 'abb'), (3, 'bbb'),
(4, 'aaa'), (4, 'abb'), (4, 'bbb'),
(5, 'aaa'), (5, 'abb'), (5, 'bbb'),
(6, 'aaa'), (6, 'abb'), (6, 'bbb');
--=========================================
-- check initial values...
SELECT * FROM #TableA ta;
SELECT * FROM #TableB tb;
-- written as a SELECT...
SELECT
*
FROM
#TableA ta
WHERE
EXISTS (SELECT 1 FROM #TableB tb WHERE ta.UserID = tb.UserID AND ta.PlanName = tb.PlanName);
-- written as an UPDATE...
UPDATE ta SET
ta.SomeDate = GETDATE()
FROM
#TableA ta
WHERE
EXISTS (SELECT 1 FROM #TableB tb WHERE ta.UserID = tb.UserID AND ta.PlanName = tb.PlanName);
-- check updated values...
SELECT * FROM #TableA ta;
Ich habe zwei Reihen in meinem inneren wählen, aber wenn ich gehe Tabelle A aktualisieren es jede Zeile aktualisiert. –
, wenn Sie laufen diese, wie viele Zeilen es zurückgibt: SELECT A. * VON TableA ALS WHERE VORHANDEN ( 1 SELECT VON TableB AS B WHERE B.userid = A.userid UND B.planName = A .planName ); –
Das gibt alles von Tabelle A zurück. Was ich versuche zu tun, ist Tabelle A zu aktualisieren, wenn ich eine Benutzer-ID und einen Plan-Namen von einem separaten Select –