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

SQL - Can I use a CASE Statement to left join the same table based on different criteria?

我有一个存储过程,它使用 LEFT JOIN 到 select 来自它的一个键。此过程由两个不同的应用程序使用,这两个应用程序对于何时应 selected.

具有不同的标准

我遇到了语法错误。如果该行是根据 @IsCheckDateRequired 字段提前 60 天创建的,则第一个语句应用作 LEFT JOIN。

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

如果@IsCheckDateRequiredField 不是必需的,我只想在键上加入table。

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 声明正在尝试 select t.Primary 键并且正在抱怨,因为我已经两次以相同的名字加入它。

我也是 SQL 的新手,并且仍在学习最佳实践,所以 应该 这甚至是我正在尝试或正在做的事情我离基地很远?

任何建议肯定会有帮助!

提前致谢!

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

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

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