开发经常犯的错误之→【join表连接关联查询 】
2014-02-25 18:10
225 查看
最近在审核SQL的时候,发现一些开发经常犯这个错误,下面我举个简单的例子,说明一下:
查找出A表和B表id相同的记录(并且把B表没有的id记录也查询出来),且name名字等于'b'的记录。
表数据:
mysql> select * from t1; +----+------+ | id | name | +----+------+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | | 5 | e | | 6 | b | +----+------+ 6 rows in set (0.00 sec) mysql> select * from t2; +----+------+ | id | name | +----+------+ | 1 | a | | 2 | b | | 3 | cc | | 4 | e | | 5 | b | +----+------+ 5 rows in set (0.00 sec)
错误写法:
mysql> select * from t1 left join t2 on t1.id=t2.id and t1.name='b'; +----+------+------+------+ | id | name | id | name | +----+------+------+------+ | 2 | b | 2 | b | | 1 | a | NULL | NULL | | 3 | c | NULL | NULL | | 4 | d | NULL | NULL | | 5 | e | NULL | NULL | | 6 | b | NULL | NULL | +----+------+------+------+ 6 rows in set (0.00 sec)
正确写法:
mysql> select * from t1 left join t2 on t1.id=t2.id where t1.name='b'; +----+------+------+------+ | id | name | id | name | +----+------+------+------+ | 2 | b | 2 | b | | 6 | b | NULL | NULL | +----+------+------+------+ 2 rows in set (0.00 sec)
呵呵,可以当一道面试题了。
相关文章推荐
- 开发经常犯的错误之→【join表连接关联查询 】
- 开发MT4连接失败最容易忽视的一个错误
- BREW开发ARM编译连接错误
- 开发常见错误解决(6)WSE3.0未处理的WebException,未处理的Web异常,基础连接以及关闭
- WCF分布式开发常见错误(2)无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
- 奇怪的svn问题 内网开发环境经常报500错误,要重新建svn库才好
- iOS开发之—— XCODE真机调试设备连接一直忙碌如何处理!(真机调试各种错误提示解决)
- T-SQL之JOIN(连接)彻底理解(开发人员必看)
- Delphi 开发时运行出现 程序连接数据库错误 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
- SQL 2005 连接错误 及解决办法-网站开发手记 (转)
- WCF分布式开发常见错误(2)无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接
- SQL 2005 连接错误 及解决办法-网站开发手记 (转)
- 开发常见错误解决(7)连接到SQL Server 2005出错
- 连接到RAC数据库的时候经常会出现ORA-12545错误
- SQL 2005 连接错误 及解决办法-网站开发手记
- MSN8.0经常出现连接错误,如何解决?
- Android开发常见错误,经常会碰到
- 开发常见错误解决(6)WSE3.0未处理的WebException,未处理的Web异常,基础连接以及关闭
- 在spring+hibernate框架的java项目开发过程中,经常会遇到这样的错误: could not find a getter for ... in class ...
- 连接到RAC数据库的时候经常会出现ORA-12545错误