有一个简单的问题。这显然是无效的T-SQL语法:
SELECT Col1
FROM SomeTable
WHERE Col2 IN
CASE WHEN someCondition THEN
('a', 'b')
ELSE
('c', 'd')
END
做一些真正简单的事情,例如将CASE WHEN...END
括号括在括号内,添加SELECT
关键字,剪切和粘贴Col2 IN
到每个case处理程序中,等等,还没有很好地完成。老实说,这看起来应该可以工作,但是CASE
语句可能在SQL中遇到一些尴尬的限制。
此语法有什么问题,如何解决?是否有任何真正的原因破坏了上述语法(可能导致了细微的调整,可以解决上述问题),或者这仅仅是语言设计者任意“忘了”处理的事情(可能需要一种与上述方法完全不同的方法) ?
请注意,此方法的某些应用将涉及someCondition
以下形式:
(SELECT SomeCol FROM OtherTable WHERE id = n) = 'someVal'
我不确定在同一查询中复制这种子选择和比较是否容易导致它实际上在SQL中的每个位置分别被调用,但是即使它被多次调用而不重复,它仍然感觉很糟糕写两次。我想它可以运行一次并存储在一个变量中,但这也是额外的代码。
a的结果CASE
必须是单个值。
的RHSIN
可以是的结果SELECT
,因此您可以执行以下操作:
declare @Which as Int = 0;
select *
from ( values ( 0 ), ( 1 ), ( 2 ), ( 3 ), ( 4 ), ( 5 ) ) as Things( Thing )
where Thing in (
select * from ( values ( 1 ), ( 2 ) ) as Bar( Foo ) where @Which = 0
union
select * from ( values ( 3 ), ( 4 ) ) as Bar( Foo ) where @Which = 1 )
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句