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 的记录,如果不存在记录,我想添加默认条目。
我想我可能需要为此使用案例,但无法确切了解如何做到这一点。
我希望我的问题很清楚?
如果你的条件在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)