按比例缩小查询范围如下:
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的一行中执行此操作?
谢谢!
答案 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))