SQL 服务器:连接 2 个表产生所需的输出
SQL Server : join 2 tables yielding required output
我正在尝试连接 2 个表 TBL_A
和 TBL_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
我正在尝试连接 2 个表 TBL_A
和 TBL_B
以使用滤色器获得所需的输出。
当过滤后的 Color
出现在 TBL_B
中时,它工作得很好。
但当过滤后的颜色值不在TBL_B
这是我目前使用的代码:
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