如果不满足条件,则从其他表中获取价值

时间:2018-10-31 12:03:36

标签: mysql sql database

我正在编写一个SQL查询:

DECLARE @ResidentID AS INT = NULL
DECLARE @Category AS INT = NULL
DECLARE @ResidentStatus AS INT = NULL
DECLARE @Date AS DATETIME = NULL--'2018-02-27'

SELECT DISTINCT r.Firstname, r.Lastname, r.Active FROM Register.Resident r
LEFT JOIN Register.MonitoringStatusOfUser msu ON msu.ResidentID = r.ID
WHERE (r.ID = @ResidentID OR @ResidentID IS NULL)

每个来自Register.Resident'r'的居民都有一个名为'Status'的字段,它是一个整数。在表Register.MonitoringStatusOfUser中,我记录了每个用户的状态,类似于状态更改的历史记录。我想做的是:检查Register.MonitoringStatusOfUser' msu '中是否有用户记录。如果@Date在msu.DateFrom和msu.DateTo之间,则显示msu.Status。如果不是,则显示r.Status。

我已经为Register.MonitoringStatusOfUser进行了左联接。但是,如果不满足以上说明的@Date条件,我将无法显示r.Status。

1 个答案:

答案 0 :(得分:1)

我不确定是否需要DISTINCT。如果需要,请重新添加。

您可以将日期条件放在ON子句中。然后使用COALESCE()来获取您想要的状态:

SELECT r.Firstname, r.Lastname, r.Active,
       COALESCE(msu.status, r.status) as status
FROM Register.Resident r LEFT JOIN
     Register.MonitoringStatusOfUser msu
     ON msu.ResidentID = r.ID AND
        @Date BETWEEN msu.DateFrom AND msu.DateTo
WHERE (r.ID = @ResidentID OR @ResidentID IS NULL)