最近在审核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 = and ='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 = where ='b'; +----+------+------+------+ | id | name | id | name | +----+------+------+------+ | 2 | b | 2 | b | | 6 | b | NULL | NULL | +----+------+------+------+ 2 rows in set (0.00 sec)
呵呵,可以当一道面试题了。

















