记一次 SQL LEFT JOIN 没有得到预期结果的错误

最近在业务中做数据开发的时候,写了一个 SQL 但是没有得到预期的结果,大致如下

1
2
3
4
5
6
7
8
9
10
表 a
+----+------+-----+
| id | name | tid |
+----+------+-----+
| 1 | aaa | 101 |
+----+------+-----+
| 2 | bbb | 102 |
+----+------+-----+
| 3 | ccc | 103 |
+----+------+-----+
1
2
3
4
5
6
7
8
9
10
表 b
+------+------+-------+
| id | nick | type |
+------+------+-------+
| 1001 | abc | false |
+------+------+-------+
| 1002 | edf | true |
+------+------+-------+
| 1003 | xyz | true |
+------+------+-------+

然后圈选的 SQL 的为

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
a.name
b.nick
FROM
a
LEFT JOIN
b
ON
a.tid = b.id
WHERE
b.type = "true"
;

本意上,通过 LEFT JOIN ,即使没有找到,也应该正常返回数据,但是实际上没有返回任何数据

因为 WHERE 条件是在 JOIN 之后发生的,所以实际上,因为 LEFT JOIN 拿不到数据,所以所有列的 b.type 都是 NULL,当然就不是 true

此时可以拆分这两个条件,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@true_b :=
SELECT
id,
nick
FROM
b
WHERE
type = "true"
;

SELCT
a.name
c.nick
FROM
a
LEFT JOIN
@true_b c
ON
a.tid = c.id

记一次 SQL LEFT JOIN 没有得到预期结果的错误
https://blog.mauve.icu/2022/05/29/develop-note/sql-left-join-fail/
作者
Shiroha
发布于
2022年5月29日
许可协议