SQL -我可以使用CASE语句根据不同的条件左连接同一个表吗?



我有一个存储过程,它使用LEFT JOIN从中选择一个键。此过程由两个不同的应用程序使用,它们对于何时应该选择此键具有不同的标准。

我得到一个语法错误。如果该行是基于@ ischeckdaterrequired字段提前60天创建的,那么第一条语句应该用作LEFT JOIN。

The correlation name 't' is specified multiple times in a FROM clause

如果@IsCheckDateRequiredField不是必需的,我只想在键上左连接表。

SELECT          
t.PrimaryKey
FROM    dbo.WTable w 
LEFT JOIN dbo.Table t
on t.PrimaryKey = w.PrimaryKey
and datediff(day, t.CreatedDate, GETUTCDATE()) > 60 
and @IsCheckDateRequired = 1

LEFT JOIN dbo.Table t
on t.PrimaryKey = w.PrimaryKey 

这可能在同一过程中做吗?我上面的SELECT语句试图选择t.Primary键,并报错,因为我在相同的名称上两次左连接它。

我对SQL也有点陌生,还在学习最佳实践,所以应该这就是我想要做的还是我错了?

任何建议肯定会有帮助!

提前感谢!

感谢评论对我的方法的帮助。

不允许在左连接上使用相同的别名。因此,我可以将逻辑放在select语句中,而不是将逻辑放在LEFT JOIN语句中。

SELECT          
CASE @IsAutoRenewalRun
when 1 then t.PrimaryKey
when 0 then t2.PrimaryKey
END
as PrimaryKey
FROM    dbo.WTable w 
LEFT JOIN dbo.Table t
on t.PrimaryKey = w.PrimaryKey
and datediff(day, t.CreatedDate, GETUTCDATE()) > 60 
and @IsCheckDateRequired = 1

LEFT JOIN dbo.Table t2
on t2.PrimaryKey = w.PrimaryKey 

相关内容

  • 没有找到相关文章

最新更新