【发布时间】:2013-06-21 23:22:10
【问题描述】:
我有一个具有以下结构和数据的 SQL Server 2008 表
INSERT INTO [ProductDetails]([ProductID],[ProductName],[Vendor],[Category])
VALUES(1,'Milk','V1','Food')
INSERT INTO [ProductDetails]([ProductID],[ProductName],[Vendor],[Category])
VALUES(2,'Milk','V2','Food')
INSERT INTO [ProductDetails]([ProductID],[ProductName],[Vendor],[Category])
VALUES(3,'Banana','V2','Food')
我想使用以下搜索参数在搜索条件中应用逻辑 OR
DECLARE @ProductName VARCHAR(10)
DECLARE @Vendor VARCHAR(10)
下面列出了各种情况下的预期结果。
---CASE 1
SET @ProductName = NULL
SET @Vendor = NULL
--Expected ProductID = 1,2,3
---CASE 2
SET @ProductName = 'Milk'
SET @Vendor = 'V2'
--Expected ProductID = 1,2,3
---CASE 3
SET @ProductName = NULL
SET @Vendor = 'V2'
--Expected ProductID = 2,3
---CASE 3
SET @ProductName = 'Banana'
SET @Vendor = NULL
--Expected ProductID = 3
---CASE 5
SET @ProductName = 'Banana'
SET @Vendor = 'V2'
--Expected ProductID = 2,3
我现在能想到的唯一解决方案是运行单独的查询,如下所示。
如果
@ProductName和@Vendor都是NULL,则选择所有产品如果
@ProductName和@Vendor不为空,则合并两个选择查询(基于@ProductName值的查询和基于@Vendor值的查询)如果
@ProductName是NOT null,@Vendor是NULL,根据@ProductName值选择查询结果如果
@ProductName为空且@Vendor为NOT null,则根据@Vendor值选择查询结果。
有没有更好的解决方案可以在一个查询中完成,就像我们为逻辑 AND 所做的那样?
参考:
【问题讨论】:
标签: sql sql-server sql-server-2008