LEFT JOIN 查询结果不是左表的全部数据的解决方法

常见以下查询,但是发现查询结果A表的数据不是全部数据?

1
2
3
4
5
6
7
8
9
SELECT
a.id b.id,
...
FROM
A a
LEFT JOIN B b ON a.id = b.id
WHERE
a.name = 'xxx'
AND b.name = 'xxx'

如果过滤条件是A表的字段 例如:a.xx = ‘xxx’

1
2
3
4
5
6
7
8
SELECT
a.id b.id,
...
FROM
A a
LEFT JOIN B b ON a.id = b.id
WHERE
a.name = 'xxx'

如果过滤的是B表的字段 例如:b.xx = ‘xxx’

1
2
3
4
5
6
SELECT
a.id b.id,
...
FROM
A a
LEFT JOIN B b ON a.id = b.id AND b.name='xxx'

如果同时过滤2个表的字段

1
2
3
4
5
6
7
8
SELECT
a.id b.id,
...
FROM
A a
LEFT JOIN B b ON a.id = b.id AND b.NAME = 'xxx'
WHERE
a.NAME = 'xxx'