在SQL Server中用LEFT JOIN保留Borrowers全量并筛选Loans特定记录
解决方案
要实现保留Borrowers表所有记录,仅关联Loans表中Loan_Type = 'Auto'的记录,关键是将贷款类型的过滤条件放在LEFT JOIN的ON子句中,而非WHERE子句。
正确SQL语句
SELECT b.Borrower_ID, b.Name, l.Loan_ID, l.Loan_Type, l.Amount FROM Borrowers b LEFT JOIN Loans l ON b.Borrower_ID = l.Borrower_ID AND l.Loan_Type = 'Auto';
关键说明
如果把l.Loan_Type = 'Auto'放到WHERE子句中,会过滤掉Borrowers表中没有匹配到Auto类型贷款的记录(这类记录对应的Loans字段为NULL,WHERE条件l.Loan_Type = 'Auto'会排除NULL值),最终效果等同于INNER JOIN,无法保留所有Borrowers记录。
将条件放在ON子句时,LEFT JOIN会先匹配符合贷款类型条件的记录,对于Borrowers中无匹配的记录,Loans相关字段会显示为NULL,从而满足保留所有Borrowers记录的需求。
预期结果

内容的提问来源于stack exchange,提问作者user24190256
相关产品推荐
相关产品推荐

