SQL Server中的可选条件

时间:2018-09-21 10:08:58

标签: sql sql-server

我想基于另一个表更新一个表。

enter image description here

我想使用表A更新表b。一个ID在表B中可以有多个序列号。如果我想更新ID的所有序列号,那么我将在表A中传递null,如果要更新仅特定的序列号,那么我将传递该序列号。因此序列号就像可选的。如何实现呢?

2 个答案:

答案 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