首页 新闻 会员 周边 捐助

沃日,这left join怎么到底咋搞

0
[待解决问题]

之前看网上说left join之类是查出左表所有记录,右表没有时相关字段就null,总之一定要把左表给你查出来。
我特么一直的理解是“查出左表所有记录”="查出记录等于左表"
特娘的现在发现个问题,如图有两张表:

那么以上数据,执行sql

SELECT
*
FROM
z_person a
LEFT JOIN z_house b ON a.id = b.person_id

我一直认为查的结果是三条,但实际是:

????
问题来了,路过的各位朋友,请教下是不是只能group by才能查得等于左表的记录了?

qq912360973的主页 qq912360973 | 菜鸟二级 | 园豆:204
提问于:2020-05-11 15:58
< >
分享
所有回答(6)
1

是的,B表必须得分组汇总,再关联查询。

清海扬波 | 园豆:825 (小虾三级) | 2020-05-11 16:43
0

这么看就是左表与右表是一对多关系,把一对多的问题转化成聚合查询就可以了,可以试SELECT * FROM z_person a LEFT JOIN z_house b ON a.id = b.person_id group by b.person_id
或者 SELECT DISTINCT 你的列名 FROM z_person a LEFT JOIN z_house b ON a.id = b.person_id group by b.person_id

尚公子 | 园豆:230 (菜鸟二级) | 2020-05-11 17:11
0

看看我博客吧https://www.cnblogs.com/pythonywy/p/11196859.html

小小咸鱼YwY | 园豆:3312 (老鸟四级) | 2020-05-11 18:42
0

你没有发现 person 表的主键Id 是一样的吗???

Tom.汤 | 园豆:3058 (老鸟四级) | 2020-05-12 10:35
0

一个人如果有两套房子,那必然对应两条记录,否则你想它怎么查?

什麼江湖 | 园豆:116 (初学一级) | 2020-05-12 15:06
0

SELECT
*
FROM
z_person a, z_house b where a.id = b.person_id

愚蠢的程序员 | 园豆:204 (菜鸟二级) | 2020-05-12 17:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册