如果记录不存在,SQL Server 在 join where 子句上添加默认值

Ale*_*lex 1 sql-server join case

我有以下 SQL Server 表设置

table1.Id
table1.Name

table2.Id
table2.Type
Run Code Online (Sandbox Code Playgroud)

table1和之间存在一对多关系,例如,在链接到 中的单个记录table2时可以有许多记录。table2table1

我现在有以下数据集:

table1  
Id  Name
1   Name1
2   Name2

table2  
Id  Type
1   1
1   2
2   1
Run Code Online (Sandbox Code Playgroud)

我现在运行以下查询:

SELECT *
FROM table1 t
LEFT JOIN table2 l
ON t.Id = l.Id
WHERE l.Type = 2
Run Code Online (Sandbox Code Playgroud)

该查询将返回以下内容:

table1      table2  
Id  Name    Id  Type
1   Name1   1   2
Run Code Online (Sandbox Code Playgroud)

我实际上想要实现的是一个将返回以下内容的查询:

table1      table2  
Id  Name    Id  Type
1   Name1   1   2
2   Name2   1   DEFAULTVALUE
Run Code Online (Sandbox Code Playgroud)

我在其中声明默认值。

我知道如果删除该WHERE子句,查询将返回 3 行,但我想排除所有类型不为 2 的记录,如果不存在记录,我想添加默认条目。

我想我可能需要为此使用案例,但无法确切了解如何做到这一点。

我希望我的问题很清楚?

Tri*_*riV 5

如果你的条件在left join表中,你可以把它放在left join子句中

SELECT  ISNULL(l.Type, 'Default Value') as Type
FROM table1 t
LEFT JOIN table2 l
ON t.Id = l.Id and l.Type = 2     
Run Code Online (Sandbox Code Playgroud)