仅当值等于1时才加入

时间:2016-10-20 16:59:40

标签: sql

嘿所以我有一个问题,我很惊讶我不能轻易找到答案。基本上我只想加入一个表,只有当一个值等于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语句中。有没有人建议如何做到这一点,并提前感谢你的帮助。

2 个答案:

答案 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)

如果您有时只想进行连接,那么您不能使用连接表中的任何列,并且仅将连接作为过滤器进行 - 否则它没有意义。

如果是这种情况,请执行joinin

而不是exists
select * from MyTable
where (@isSelectall <> 1 or id in (select id from course))

如果您实际使用的是course中的某些列,那么您必须从注释中执行left join,或者像其他答案那样执行动态SQL。