SQL INNER JOIN关联两表如何保留左表NULL行并填充默认值
实现方案
不需要额外创建第四张表,调整连接类型加空值处理即可实现需求。
你当前使用的INNER JOIN(内连接)只会返回两表连接条件完全匹配的行,而SQL中NULL与任何值做等值判断都不会成立,因此table_A中id为NULL的行会被直接过滤,无法出现在结果中。
具体实现步骤
- 将内连接替换为
LEFT JOIN(左外连接),以table_A作为左表,保证左表所有行都会被保留,哪怕右表table_B中没有匹配的对应记录 - 使用
COALESCE函数处理右表返回的name字段:当匹配不到对应记录时,table_B.name会返回NULL,此时自动填充为你需要的no entry
可直接运行的创建视图代码
CREATE VIEW view_1 AS SELECT DISTINCT table_A.id, COALESCE(table_B.name, 'no entry') AS name FROM table_A LEFT JOIN table_B ON table_A.id = table_B.id;
执行上述语句创建的视图,返回结果完全符合你的预期:
| id | name |
|---|---|
| 1 | a |
| 2 | b |
| NULL | no entry |
补充说明:如果你的数据库环境不支持
COALESCE函数,也可以用CASE WHEN实现相同效果,例如将name字段的写法替换为CASE WHEN table_B.name IS NULL THEN 'no entry' ELSE table_B.name END AS name,效果完全一致。
内容的提问来源于stack exchange,提问作者user19435153
相关产品推荐
相关产品推荐

