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