大家好,我是梦辛工作室的 灵
最近又遇到一个问题,那就是 比如目前 有 A B 两 表,我想要 返回A 表的所有数据,但又想限定 B表的一些条件,比如:
A 表:
cid | name |
---|---|
1 | 语文 |
2 | 数学 |
3 | 英语 |
4 | 政治 |
B表:
tid | teachername | cid |
---|---|---|
1 | 李老师 | 1 |
2 | 赵老师 | 2 |
3 | 钱老师 | 2 |
4 | 孙老师 | 3 |
5 | 梁老师 | 2 |
6 | 周老师 | 3 |
7 | 唐老师 | 2 |
select A.cid,A.name,B.teachername from A left join B on A.cid = B.cid;
这时候我想限定 B表就只返回 tid 为2的数据,但又想 A表是所有数据,其他没有的数据按 null补充,按我们正常就会这样写
select A.cid,A.name,B.teachername from A left join B on A.cid = B.cid where B.tid = 2;
这样就只会返回一条数据
cid | name | teachername |
---|---|---|
2 | 数学 | 赵老师 |
和我们的想要的结果就不一样了,我们还希望 将A表的其他数据 全返回,
其实可以这样写:
select A.cid,A.name,B.teachername from A left join B on A.cid = B.cid and B.tid = 2;
在连接表后面 加上一个 and 后面跟条件就可以了
cid | name | teachername |
---|---|---|
2 | 数学 | 赵老师 |
1 | 语文 | null |
3 | 英语 | null |
4 | 政治 | null |
这个是在MySQL上可以这样用,其他SQL数据库还未前去证实过,应该都差不多