如果满足条件,则执行SQL内部联接

如果满足条件,则执行SQL内部联接,sql,sql-server,Sql,Sql Server,我想要一个改进我的sql代码的好方法,当条件满足时,我必须使用内部连接。我目前正在复制代码: @SystemMerge bit if (@SystemMerge=1) BEGIN SELECT ....... FROM myTable INNER JOIN table ON table.param1=myTable.param1 INNER JOIN systemTable on systemTable.param2=myTabl

我想要一个改进我的sql代码的好方法,当条件满足时,我必须使用内部连接。我目前正在复制代码:

@SystemMerge bit

if (@SystemMerge=1)  
BEGIN
   SELECT
         .......
      FROM myTable
      INNER JOIN table ON table.param1=myTable.param1
      INNER JOIN systemTable on systemTable.param2=myTable.param2
   END
ELSE
   BEGIN
      SELECT
         .......
      FROM myTable
      INNER JOIN table ON table.param1=myTable.param1
   END
我想这样做:

@SystemMerge bit
BEGIN
   SELECT
      .......
   FROM myTable
   INNER JOIN table ON table.param1=myTable.param1
   ***//the next 4 lines is not working, but this pseudo of what i want:***
   if (@SystemMerge=1)  
   begin
      INNER JOIN systemTable on systemTable.param2=myTable.param2
   end
编辑: 解决方案(感谢@Damien_不信者):

这应该(适当地)做同样的事情:

SELECT
     .......
  FROM myTable
  INNER JOIN table ON table.param1=myTable.param1
  LEFT JOIN systemTable on systemTable.param2=myTable.param2 and @SystemMerge = 1
  WHERE (@SystemMerge = 0 OR systemTable.NonNullableColumn IS NOT NULL)
当然,这也意味着对
systemTable
中的列的任何其他引用都必须编写为
NULL

动态sql如何

declare @sel varchar(max)

set @sel = ' SELECT
         .......
         FROM myTable
         INNER JOIN table ON table.param1=myTable.param1
        '

 if (@SystemMerge=1)  
   begin
     set @sel = @sel+'INNER JOIN systemTable on systemTable.param2=myTable.param2'
   end

exec(@sel)

简单的方法,如果我是对的-

SELECT
    .......
FROM myTable
INNER JOIN table ON table.param1 = myTable.param1
INNER JOIN systemTable on @SystemMerge = 0 or systemTable.param2=myTable.param2  

向我们展示不起作用的代码。为什么不起作用?你的错误是什么?例如,您可能需要使用动态SQL。您可以基于条件构建动态查询,然后使用EXEC(查询)执行该查询。动态查询示例:拜托,搜索“条件内部联接”有这么难吗?谷歌会给你,例如,在我的情况下没有帮助,但我保留你的答案,以备将来需要。谢谢。好的,我已经改进了答案,现在效果很好。谢谢选了你。
SELECT
    .......
FROM myTable
INNER JOIN table ON table.param1 = myTable.param1
INNER JOIN systemTable on @SystemMerge = 0 or systemTable.param2=myTable.param2