SQL:左连接失败时在列中显示指定值的实现方法
实现左连接无匹配时显示指定值的方案
当然可以实现啦!你可以借助SQL里的通用函数COALESCE()(或者部分数据库专属的IFNULL()/ISNULL())来处理左连接后出现的NULL值,把它替换成你想要的指定内容。
步骤说明
- 先看基础的左连接SQL,这时候未匹配的行对应的分类名称会是NULL:
SELECT p.id, c.name FROM Page p LEFT JOIN Category c ON p.cat = c.id;
执行后结果会是:
| id | name |
|---|---|
| 1 | NULL |
| 2 | Foo |
| 3 | Baz |
- 用
COALESCE()替换NULL值COALESCE()函数会返回传入参数中的第一个非NULL值,我们把它用来替换左连接失败时的NULL:
SELECT p.id, COALESCE(c.name, '未分类') AS category_name FROM Page p LEFT JOIN Category c ON p.cat = c.id;
这样执行后,cat=0的行就会显示指定的未分类:
| id | category_name |
|---|---|
| 1 | 未分类 |
| 2 | Foo |
| 3 | Baz |
数据库适配说明
- 如果是MySQL数据库,也可以用专属的
IFNULL()函数,效果和上面一致:
SELECT p.id, IFNULL(c.name, '未分类') AS category_name FROM Page p LEFT JOIN Category c ON p.cat = c.id;
- 如果是SQL Server,可以用
ISNULL()函数,用法类似:
SELECT p.id, ISNULL(c.name, '未分类') AS category_name FROM Page p LEFT JOIN Category c ON p.cat = c.id;
不过COALESCE()是SQL标准函数,支持大多数数据库(比如PostgreSQL、MySQL、SQL Server等),通用性更强。
内容的提问来源于stack exchange,提问作者Frank Groot
相关产品推荐
相关产品推荐

