mysql - 为什么这两个语句有不同的结果?

mysql> select a.id,a.parent from qa a left join qa b on a.parent=b.parent where b.id=7;
+----+--------+
| id | parent |
+----+--------+
|  7 |      1 |
|  8 |      1 |
|  9 |      1 |
+----+--------+
3 rows in set (0.00 sec)

mysql> select a.id,a.parent from qa a left join qa b on a.parent=b.parent and b.id=7;
+----+--------+
| id | parent |
+----+--------+
|  1 |   NULL |
|  2 |   NULL |
|  3 |   NULL |
|  4 |   NULL |
|  5 |   NULL |
|  6 |   NULL |
|  7 |      1 |
|  8 |      1 |
|  9 |      1 |
+----+--------+

我读的完全一样!

最佳答案

第一条语句将创建连接,然后使用WHERE b.id=7过滤结果。
所以只有a中a.parent=b.parent且连接结果为b.id=7的行。
第二条语句将创建b.id=7的左连接,从而包括来自qa a的所有行,然后只包括来自qab的值,其中b.id=7。
所以a中a.parent=b.parent的所有行,但只显示b中b.id=7的值