次の構造とデータを持つ 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
の場合、すべての製品を選択しますIF
@ProductName
と@Vendor
が null でない場合、2 つの選択クエリ (値に基づく@ProductName
クエリと値に基づくクエリ@Vendor
)の和集合を作成します。IF
@ProductName
isNOT null
and@Vendor
is 、値NULL
に基づいてクエリ結果を選択@ProductName
IF
@ProductName
が null で@Vendor
ありNOT null
、値に基づいてクエリ結果を選択します@Vendor
。
論理 AND の場合のように、1 つのクエリで実行できるより良い解決策はありますか?
参照: