根据条件跳过连接而不进行动态查询

时间:2015-07-22 06:09:39

标签: sql sql-server join

我有一个场景,就像我有两张名为tbl1tb2的桌子

Select * from tbl1 t1 inner join tb2 t2 on t1.Id = t2.id

上面的示例查询我需要实现的是我需要根据条件执行此内连接。 (即)我将输入参数IsJoin作为真意,我可以执行内连接。我不喜欢动态查询。如果有任何其他方法可以实现这一点,请告诉我。

提前致谢

3 个答案:

答案 0 :(得分:0)

只有一种方法可以做到这一点 - 使用find path -type f -type f \( -name "*.jpg" -or -name "*.gif" \) -print | while read FILE do # Process the $FILE done IF语句

ELSE

如果只是几个条件,那么使用多个语句就可以了,但是如果根据条件进行了大量的连接 - 它更容易维护动态SQL。它变得更具可读性。

答案 1 :(得分:0)

尝试这种方式:

declare @IsJoin numeric(1,0)
select @IsJoin = 1

Select * from tbl1 t1 
left join tb2 t2 on t1.Id = t2.id
                 and @IsJoin = 1

答案 2 :(得分:0)

如果你需要保留t1和t2的所有列,无论是否加入

DECLARE @IsJoin bit = 1 -- 1 for true; 0 for false

SELECT 
    * 
FROM
    tbl1 t1 
    LEFT OUTER JOIN tbl2 t2 on t1.Id = t2.id and @IsJoin = 1
WHERE 
    (@IsJoin = 0 OR t2.id is not null) -- Keep the inner join behavior