SQL子查询返回了多个结果

Rok*_*nik 2 sql t-sql sql-server

我有一个查询,当我检查过滤器是否为NULL然后我选择全部,但如果它们不是null我只选择具有这些过滤器的对象.查询如下.

SELECT * 
FROM [PointOfInterest]
WHERE [PointOfInterest].[Id] IN (CASE
                                    WHEN @filters IS NULL THEN [PointOfInterest].[Id]
                                    WHEN @filters IS NOT NULL THEN (SELECT DISTINCT [PointOfInterestIcon].[PointOfInterestId]
                                            FROM  [PointOfInterestIcon]
                                            WHERE [IconId] IN (SELECT [Id] FROM OPENJSON(@filters)WITH([Id] NVARCHAR(255))))
                                    END)
Run Code Online (Sandbox Code Playgroud)

如果我删除CASE语句并且只在SELECT中放入查询工作.任何想法如何解决这一问题?

Gor*_*off 5

只需使用常规布尔逻辑:

SELECT * 
FROM [PointOfInterest]
WHERE @filters IS NULL OR
      [PointOfInterest].[Id] IN (SELECT poi.[PointOfInterestId]
                                 FROM [PointOfInterestIcon] poi
                                 WHERE poiIconId IN (SELECT [Id] FROM OPENJSON(@filters) WITH ([Id] NVARCHAR(255)))
                                );
Run Code Online (Sandbox Code Playgroud)