我有一个存储过程,它使用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