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 |
+----+--------+
我读完它们一样!
答案 0 :(得分:3)
第一个语句将创建连接,然后使用 WHERE b.id = 7 过滤结果。
因此,只有来自 a 的行 a.parent = b.parent 且该加入结果 b.id = 7 。
第二个语句将使用 b.id = 7 创建左连接,因此包括来自 qa a 的所有行,然后仅包含来自 qa的值b 其中 b.id = 7 。
所有来自 a 的行,其中 a.parent = b.parent ,但仅显示来自 b 的值 b。 ID = 7 强>
答案 1 :(得分:0)
您首先通过自动消除NULLs
可以/将返回的LEFT JOIN
来限制结果的右侧。如果您使用INNER JOIN
,声明将返回相同的结果。
答案 2 :(得分:0)
首先在select语句中有一个条件(where
),第二个在连接上应用b.id条件。
来自文档:
如果LEFT JOIN中ON或USING部分的右表没有匹配的行,则右表使用所有列设置为NULL的行。