IS NULL vs = NULL ....如何避免巨大的IF ELSE?

时间:2018-11-05 19:52:08

标签: sql sql-server tsql

按比例缩小查询范围如下:

SELECT 
    ...
FROM
    Settings s
    LEFT JOIN OrganizationUserSettings ous ON s.SettingID = ous.SettingID 
        AND (ProfileID = @ProfileID OR ProfileID IS NULL)

现在,在OrganizationUserSettings表中,我有两行看起来像这样:

ID    SettingID    ProfileID 
----------------------------
1        3           NULL
2        3           50

可以预料,在我的结果中,我得到了两行。但是我只需要排一行。如果ProfileID = @ProfileID有一个匹配项,那么我需要那个。如果没有,那么我将采用NULL。

或者,更好的是……简而言之,这是我的真正问题。我可以像这样做一个巨大的IF ELSE:

IF (@ProfileSys IS NULL)
BEGIN
    SELECT 
        ...
    FROM
        Settings s
        LEFT JOIN OrganizationUserSettings ous ON s.SettingID = ous.SettingID 
            AND (ProfileID IS NULL)
END
ELSE
BEGIN
        SELECT 
        ...
    FROM
        Settings s
        LEFT JOIN OrganizationUserSettings ous ON s.SettingID = ous.SettingID 
            AND (ProfileID = @ProfileID)
END

但是我真的不想这么做。我在这里向您展示的只是一个更大查询的一部分(为简单起见,我将其缩小了。)而且我不想进行完全动态的查询。

是否可以在原始JOIN的一行中执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:6)

除非我在这里缺少任何东西,否则有一个简单的解决方案:

SELECT 
...
FROM
Settings s
LEFT JOIN OrganizationUserSettings ous ON s.SettingID = ous.SettingID 
    AND (ProfileID = @ProfileID OR (ProfileID IS NULL AND @ProfileID IS NULL))