嘿所以我有一个问题,我很惊讶我不能轻易找到答案。基本上我只想加入一个表,只有当一个值等于1.我已经尝试过使用case语句,但这不会起作用,所以我陷入僵局,非常感谢一些建议。
基本上我有一个传递的表@courseSection和一个局部变量@isSelect all = 0.所以现在我想检查@courseSection表中的-1。
伪代码:
If @courseSection contains -1 then
@isSelectAll = 1
end
if @isSelect all = 1 then
inner join course s on c.id = cs.id
end
这也在Select语句中。有没有人建议如何做到这一点,并提前感谢你的帮助。
答案 0 :(得分:0)
您需要使用动态查询,不能基于Join
评估CASE
表。
Declare @sql varchar(max)= ''
Set @sql = 'your current query without join'
Set @sql += case when @isSelect all = 1 then ' inner join course s on c.id = cs.id '
else '' end
--print @sql
Exec (@sql)
答案 1 :(得分:0)
如果您有时只想进行连接,那么您不能使用连接表中的任何列,并且仅将连接作为过滤器进行 - 否则它没有意义。
如果是这种情况,请执行join
或in
exists
。
select * from MyTable
where (@isSelectall <> 1 or id in (select id from course))
如果您实际使用的是course
中的某些列,那么您必须从注释中执行left join
,或者像其他答案那样执行动态SQL。