假设我有一个名为 #ListTable 的表:
Item:
Apple
Bannana
Pea
Milk
Green
另一张表食物类似于:
Date Fruit Vegetable Dairy Color
2/16/17 Apple NULL NULL Green
2/16/17 NULL Pea NULL Green
2/16/17 NULL NULL Milk White
如果列表中的值存在于食物表中,我想返回记录。
所以我有类似的东西:
DECLARE @Date = '2/16/17',
@InclusionFlag = 1
SELECT *
FROM Food F
INNER JOIN #ListTable LT1
ON F.Fruit = LT1.Item
WHERE Date = @Date
UNION ALL
SELECT *
FROM Food F
INNER JOIN #ListTable LT2
ON F.Color = LT1.Item
WHERE Date = @Date
...
如果List中的项目对应于我指定的某个字段,则基本上返回记录。我知道可能有重复的#34;记录像Apple正在" Apple"和"格林"我想要那个。
但是,我还希望能够将包含标记切换为0并返回ListTable中与Food中的任何字段不匹配的项目。
我如何退回不匹配的证券清单?我知道有类似的问题,但我无法在多场比较案例中找出它。
由于
答案 0 :(得分:1)
您可以先使用 cross apply()
取消数据,然后在case
子句中使用带有when exists()
的{{1}}表达式返回0或者存在时为1,并将其与where
进行比较。
@InclusionFlag
答案 1 :(得分:0)
如果我做对了,食物行(可能重复)匹配#ListTable
SELECT F.*
FROM Food F
INNER JOIN #ListTable LT1
ON LT1.Item IN (F.Fruit, F.Vegetable, F.Dairy, F.Color)
WHERE Date = @Date