我有这两个表
Table P
A | B | C | D
-----------------------------
'abc' | NULL | 'kkk' | NULL
'xyz' | NULL | 'www' | NULL
'pqr' | NULL | 'ccc' | NULL
Table Q
X | Y
-----------------------------
'abc' | 123
'xyz' | 12
'pqr' | 34
我需要用表Q中的Y值更新表P列B和D,只要表P中的列A和C与表Q中列X的值匹配。
我的更新现在:
UPDATE TableP
SET B = Q.Y
FROM TableQ Q (NOLOCK)
WHERE Q.X = A
UPDATE TableP
SET D = Q.Y
FROM TableQ Q (NOLOCK)
WHERE Q.X = C
我只知道如何在2个UPDATE语句中执行此操作,如何在单个UPDATE语句中执行此操作?
答案 0 :(得分:2)
您可以使用UPDATE FROM JOIN
:
UPDATE p
SET B = q1.Y, --COALESCE(q1.Y, p.B) if needed
D = q2.Y --COALESCE(q2.Y, p.D)
FROM TableP p
LEFT JOIN TableQ q1
ON p.A = q1.X
LEFT JOIN TableQ q2
ON p.C = q2.X;
的 LiveDemo
强>
输出:
╔═════╦═════╦═════╦═══╗
║ A ║ B ║ C ║ D ║
╠═════╬═════╬═════╬═══╣
║ abc ║ 123 ║ kkk ║ ║
║ xyz ║ 12 ║ www ║ ║
║ pqr ║ 34 ║ ccc ║ ║
╚═════╩═════╩═════╩═══╝
答案 1 :(得分:2)
使用UPDATE
语法
Join
UPDATE p
SET B = case when Q.X = p.a then Q.Y else B end,
D = case when Q.X = p.c then Q.Y else D end
FROM TableP p
INNER JOIN TableQ Q
ON Q.X in (p.A,p.C)
答案 2 :(得分:1)
试试这个
UPDATE TableP
SET B = CASE WHEN Q.X = A THEN Q.Y ELSE B END,
D = CASE WHEN Q.X = C THEN Q.Y ELSE D END
FROM TableQ Q (NOLOCK)
但是,我错过了加入。所以这是我更新的解决方案
UPDATE TableP
SET B = CASE WHEN Q.X = A THEN Q.Y ELSE B END,
D = CASE WHEN Q.X = C THEN Q.Y ELSE D END
FROM TableQ Q (NOLOCK)
INNER JOIN TableP P
ON P.A = Q.X