首页 > 解决方案 > SELECT * FROM 存在 IF EXISTS 的子查询

问题描述

似乎无法弄清楚这一点。

该表OrganizationUserSettings有两行SettingSysis3OrganizationSysis 1012

总会一行为OrgUserSettingsProfileSys空。可能有一行(或多行)它有一个值。

给定一个参数@OrgUserSettingsProfileSys,我需要一个匹配的行(如果存在)。如果没有,那么我需要它为空的行。

在此处输入图像描述

SELECT * FROM
(
    IF EXISTS (Select * FROM OrganizationUserSettings WHERE OrgUserSettingsProfileSys = @OrgUserSettingsProfileSys)
    BEGIN 
        SELECT * FROM OrganizationUserSettings WHERE OrgUserSettingsProfileSys = @OrgUserSettingsProfileSys
    END
    ELSE
    BEGIN
        SELECT * FROM OrganizationUserSettings WHERE OrgUserSettingsProfileSys IS NULL
    END
)
WHERE SettingSys = 3 AND OrganizationSys = 1012

有了这个,我得到

'IF' 附近的语法不正确

编辑:

为了在此处发布,我已简化此查询。我需要这成为子查询的一部分。

标签: sqlsql-servertsql

解决方案


 SELECT top 1 * 
FROM OrganizationUserSettings 
WHERE SettingSys = 3 AND OrganizationSys = 1012
and (OrgUserSettingsProfileSys = @OrgUserSettingsProfileSys or OrgUserSettingsProfileSys is NULL)
order by OrgUserSettingsProfileSys desc

推荐阅读