SQL 服务器:连接 2 个表产生所需的输出

SQL Server : join 2 tables yielding required output

我正在尝试连接 2 个表 TBL_ATBL_B 以使用滤色器获得所需的输出。

当过滤后的 Color 出现在 TBL_B 中时,它工作得很好。

但当过滤后的颜色值不在TBL_B

中时,它不会return所需的输出

这是我目前使用的代码:

DECLARE 
    @START_DATE DATETIME,
    @END_DATE DATETIME, 
    @COLOR VARCHAR(10)

SET @START_DATE = '2021-12-07' 
SET @END_DATE = '2021-12-08' 
SET @COLOR = 'Red'  -- can be Blue or Green based on requirement

SELECT      TBL_A.ID_CLM,
            TBL_A.DAY_CLM,
            TBL_A.DT_CLM,   
            TBL_B.CLR_CLM
FROM        TBL_A
LEFT JOIN   TBL_B 
ON          TBL_B.DT_CLM = TBL_A.DT_CLM
WHERE       TBL_A.DT_CLM BETWEEN @START_DATE AND @END_DATE 
            AND
            (TBL_B.CLR_CLM IS NULL OR TBL_B.CLR_CLM IS NOT NULL)

我实际需要的图形表示:

Image with different outputs and required one

您正在取消 OUTER 连接,因为您在 B table 上过滤... 只需删除过滤器并将其设置为连接谓词,如下所示:

SELECT      ...
FROM        TBL_A
            LEFT OUTER JOIN TBL_B 
                 ON TBL_B.DT_CLM = TBL_A.DT_CLM
                    AND (TBL_B.CLR_CLM IS NULL OR TBL_B.CLR_CLM IS NOT NULL)
WHERE       TBL_A.DT_CLM BETWEEN @START_DATE AND @END_DATE