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中放入查询工作.任何想法如何解决这一问题?
只需使用常规布尔逻辑:
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)
归档时间: |
|
查看次数: |
44 次 |
最近记录: |