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

Cas*_*ton 1 sql t-sql sql-server

缩小后看我的查询看起来像这样:

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

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

ID    SettingID    ProfileID 
----------------------------
1        3           NULL
2        3           50
Run Code Online (Sandbox Code Playgroud)

正如所料,在我的结果中,我得到两行.但我需要只获得一排.如果有匹配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
Run Code Online (Sandbox Code Playgroud)

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

有没有办法在原始JOIN的一行中执行此操作?

谢谢!

Zoh*_*led 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))
Run Code Online (Sandbox Code Playgroud)