我想基于另一个表更新一个表。
我想使用表A更新表b。一个ID在表B中可以有多个序列号。如果我想更新ID的所有序列号,那么我将在表A中传递null,如果要更新仅特定的序列号,那么我将传递该序列号。因此序列号就像可选的。如何实现呢?
答案 0 :(得分:0)
您可以连接两个表:
SELECT [A].[ID]
,[B].[SerialNumber]
,[A].[Values]
FROM [TableA] A
LEFT JOIN [TableB] B ON ([B].[ID] = [A].[ID] AND ([B].[SerialNumber] = [A].[SerialNumber] OR [A].[SerialNumber] IS NULL))
答案 1 :(得分:0)
这涵盖了所有情况:
SELECT B.ID, B.SerialNumber
FROM TableA A
JOIN TableB B ON A.ID=B.ID AND (A.SerialNumber=B.SerialNumber OR A.SerialNumber IS NULL)
演示:
WITH TableA AS
(
SELECT * FROM (VALUES
(1,'AB'),
(1,'BC'),
(2,NULL),
(3,'AB')
)T(ID,SerialNumber)
), TableB AS
(
SELECT * FROM (VALUES
(1,'AB'),
(1,'BC'),
(2,'AB'),
(2,'BC'),
(3,'AB'),
(3,'BC'),
(3,'DE')
)T(ID,SerialNumber)
)
SELECT B.ID, B.SerialNumber
FROM TableA A
JOIN TableB B ON A.ID=B.ID AND (A.SerialNumber=B.SerialNumber OR A.SerialNumber IS NULL)
结果
ID SerialNumber
----------- ------------
1 AB
1 BC
2 AB
2 BC
3 AB