select case when语句

简介:

今天看见一公司的数据库面试题,其中有道一开始没想起怎么做,后来摸索了下终于做出来了。

题目是:两个表联合查询,当表2的记录在表A里没有时,将其设置为0.

mysql> select * from t1;
+----+------+
| id | name |
+----+------+
|  1 | bbs  |
|  2 | bb   |
|  3 | cc   |
+----+------+
3 rows in set (0.01 sec)

mysql> select * from t2;
+----+------+
| id | name |
+----+------+
|  1 | aa   |
|  2 | bb   |
+----+------+
2 rows in set (0.00 sec)

mysql> select t1.name as name1,t2.name as name2 from t1 left join t2 on t1.id=t2.id;                                         
+-------+-------+
| name1 | name2 |
+-------+-------+
| bbs   | aa    |
| bb    | bb    |
| cc    | NULL  |
+-------+-------+
3 rows in set (0.00 sec)

将NULL变为0

 

第一种写法:

mysql> select t1.name as name1,if(t2.name is NULL,0,t2.name) as name2 from t1 left join t2 on t1.id=t2.id;                         
+-------+-------+
| name1 | name2 |
+-------+-------+
| bbs   | aa    |
| bb    | bb    |
| cc    | 0     |
+-------+-------+
3 rows in set (0.00 sec)

 

第二种写法:

mysql> select t1.name as name1,(case when t2.name is NULL then '0' else t2.name end) as name2 from t1 left join t2 on t1.id=t2.id;   
+-------+-------+
| name1 | name2 |
+-------+-------+
| bbs   | aa    |
| bb    | bb    |
| cc    | 0     |
+-------+-------+
3 rows in set (0.00 sec)

 

参考:

http://apps.hi.baidu.com/share/detail/22393623

 

本文转自 liang3391 51CTO博客,原文链接:http://blog.51cto.com/liang3391/815271


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
2160 1
|
SQL 存储 Java
Apache Doris 2.1.7 版本正式发布
亲爱的社区小伙伴们,**Apache Doris 2.1.7 版本已于 2024 年 11 月 10 日正式发布。**2.1.7 版本持续升级改进,同时在湖仓一体、异步物化视图、半结构化数据管理、查询优化器、执行引擎、存储管理、以及权限管理等方面完成了若干修复。欢迎大家下载使用。
518 3
|
SQL JavaScript 数据库
sqlite在Windows环境下安装、使用、node.js连接
sqlite在Windows环境下安装、使用、node.js连接
|
Java 开发工具 Android开发
探索Android和iOS开发的差异与挑战
在移动应用开发的广阔天地中,Android和iOS两大平台如同两座高峰,各自拥有独特的风景。本文将深入探讨这两个平台的开发差异,包括编程语言、开发工具、用户界面设计等方面,并分析开发者面临的挑战。无论你是初涉移动应用开发的新手,还是已经在这条路上走了很远的老手,这篇文章都将为你提供新的视角和思考。让我们一起走进这个充满创新与挑战的世界,发现那些隐藏在代码背后的秘密。
|
编译器 C语言 C++
【C语言】循环语句(语句使用建议)
【C语言】循环语句(语句使用建议)
409 0
|
Linux Shell 编译器
Linux0.11 内核体系结构(八)(上)
Linux0.11 内核体系结构(八)
428 0
|
缓存 NoSQL Shell
"揭秘!Redis数据导出大揭秘:从繁琐到一键搞定,让你的数据飞跃而出,感受前所未有的数据导出快感!"
【8月更文挑战第15天】Redis是高性能键值存储系统,适用于缓存等多种场景。随数据增长,需导出数据以分析、备份或迁移。本文详述三种导出方法:1) Redis命令与重定向,如SCAN与GET命令结合;2) 利用RDB快照或AOF持久化机制;3) 第三方工具如redis-dump。每种方法各有优势,可根据数据量及需求选择,同时需考虑操作对性能的影响及数据安全。
1193 0
|
存储 安全 Unix
Linux文件服务NFS共享存储服务
本篇文章介绍一下NFS共享存储服务实验的步骤以及SSH远程服务的使用。
971 2
|
存储 JavaScript Python
word文档转成Markdown文档并在Typora免费版添加图床-----想想都很香
word文档转成Markdown文档并在Typora免费版添加图床-----想想都很香
1304 0
|
C++
<iomanip>库中setw(),setfill()等函数的使用
<iomanip>库中setw(),setfill()等函数的使用
1675 0