我有一張桌子 A
aId aCode
1 ABC
2 DEF
3 GHI
..和B表
bId bCode
1 JKL
2 MNO
3 PQR
在 C 表中,如果 cCode 在 A 或 B 表中,我應該更新列“inAorB”,因此它看起來像這樣:
cId cCode inAorB
1 ABC A
2 GHI A
3 PQR B
.. 現在 C 看起來像這樣:
cId cCode inAorB
1 ABC NULL
2 GHI NULL
3 PQR NULL
它應該更新所有行。
uj5u.com熱心網友回復:
要重現您的代碼,您可以這樣做:
CREATE TABLE #A
(
[aId] INT,
[aCode] VARCHAR(MAX)
)
INSERT INTO #A VALUES
(1, 'ABC'),
(2, 'DEF'),
(3, 'GHI')
CREATE TABLE #B
(
[bId] INT,
[bCode] VARCHAR(MAX)
)
INSERT INTO #B VALUES
(1, 'JKL'),
(2, 'MNO'),
(3, 'PQL')
CREATE TABLE #C
(
[cId] INT,
[cCode] VARCHAR(MAX),
[inAorB] CHAR(1)
)
INSERT INTO #C VALUES
(1, 'ABC',NULL),
(2, 'GHI',NULL),
(3, 'PQR',NULL)
-- The script you are interested in
UPDATE C
SET [inAorB] = CASE
WHEN A.aId IS NOT NULL THEN 'A'
WHEN B.bId IS NOT NULL THEN 'B'
ELSE NULL
END
FROM #C AS C
LEFT JOIN #A AS A ON A.aCode = C.cCode
LEFT JOIN #B AS B ON B.bCode = C.cCode
-- END
SELECT * FROM #C
DROP TABLE #A
DROP TABLE #B
DROP TABLE #C
如果兩者都不為空,將設定“A”
uj5u.com熱心網友回復:
如果條件為真,您可以使用CASE運算式應用特定結果。請注意,如果代碼可以同時出現在 A 和 B 中,則將選擇 A。
UPDATE C SET inAorB = CASE
WHEN EXISTS (SELECT 1 FROM dbo.A WHERE A.aCode = C.cCode) THEN 'A'
WHEN EXISTS (SELECT 1 FROM dbo.B WHERE B.bCode = C.cCode) THEN 'B'
ELSE '?' -- in case of no match
END
FROM dbo.C AS C;
這個小提琴中的作業示例。請注意,抽象為EXISTS將避免您在LEFT JOINs 中找到的不必要的排序。
uj5u.com熱心網友回復:
--A TABLE
DECLARE @A_Table AS TABLE
(
aId INT,
aCode VARCHAR(100)
);
--INSERTING TO A TABLE
INSERT @A_Table
(
aId,
aCode
)
VALUES
(1, 'ABC'),
(2, 'DEF'),
(3, 'GHI');
--B TABLE
DECLARE @B_Table AS TABLE
(
bId INT,
bCode VARCHAR(100)
);
--INSERTING TO B TABLE
INSERT @B_Table
(
bId,
bCode
)
VALUES
(1, 'JKL'),
(2, 'MNO'),
(3, 'PQR');
--C TABLE
DECLARE @C_Table AS TABLE
(
cId INT,
cCode VARCHAR(100),
inAorB VARCHAR(100)
);
--INSETING TO C TABLE
INSERT @C_Table
(
cId,
cCode,
inAorB
)
VALUES
(1, 'ABC', NULL),
(2, 'JKL', NULL),
(3, 'PQR', NULL);
--UPDATING inAorB
--LEFT JOIN C TABLE WITH TABLE A AND TABLE B
UPDATE C
SET C.inAorB = CASE
WHEN A.aId IS NOT NULL THEN
'A'
WHEN B.bId IS NOT NULL THEN
'B'
END
FROM @C_Table AS C
LEFT JOIN @A_Table AS A
ON A.aCode = C.cCode
LEFT JOIN @B_Table AS B
ON B.bCode = C.cCode
WHERE YOUR CONDITIONS..
uj5u.com熱心網友回復:
您可以LEFT JOIN對每個源表執行 a ,然后使用 aCASE來找出哪個產生匹配項。由于CASE按順序計算,如果您必須處理兩個表中的代碼,您還可以使用它來決定優先考慮哪個表。
UPDATE c
SET inAorB = CASE
WHEN a.aCode IS NOT NULL THEN 'A'
WHEN b.bCode IS NOT NULL THEN 'B'
ELSE NULL
END
FROM
c
LEFT JOIN
a
ON a.aCode = c.cCode
LEFT JOIN
b
ON b.bCode = c.cCode;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/521479.html
上一篇:SqlServer,多條件更新
