我尝试编写查询(Microsoft SQL SERVER),如下所示:
select productid from T1
union
select productid from T2
union
select ProductID from T3
问题在于我希望那个联盟中的一个将依赖于一个值(比方说@x) 所以,我写这个查询:
select case when @x=1 then productid end
from T1
union
select productid from T2
union
select ProductID from T3
但它仍在扫描所有T1。
我知道"案例"扫描表即使它与条件不匹配: 当1 = 2时选择case,然后从T1开始生产 如果执行或不执行,我如何编写基于值的查询? 比如:case @ x = 1然后从T1结束选择productid .... *我需要找到一种没有动态sql的方法 谢谢
答案 0 :(得分:0)
使用它:
Declare @SQL nvarchar(max)
Set @SQL = N' select productid From T1 '
Set @SQl = @SQL + N' UNION select productid From T2'
if(@x=1)
Set @SQl = @SQL + N' UNION select productid From T3'
exec (@SQL)
答案 1 :(得分:0)
非常感谢你的帮助, 我设法按照Pieter的建议,使用where子句。查询看起来像
select productid from t1 union select productid from t2
union select productid from t3 inner join t4 on t3.id=t4.t3id where t3.value=@x
虽然我不想使用t4表(因为@x是每个t3一个) 谢谢大家。