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的一行中执行此操作?
谢谢!
除非我在这里遗漏了一些东西,否则有一个简单的解决方案:
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)