MySQL自连接查询为何输出3份原表数据?求技术解释
问题解释:为什么查询返回9条重复数据?
你写的查询触发了笛卡尔积(Cross Join),这是数据库未指定连接条件时的默认行为:
- 当你在
FROM子句里同时声明Person AS one, Person AS two,但没加任何ON或WHERE过滤条件时,MySQL会把one表的每一行和two表的每一行进行全量配对。 - 你的Person表共有3行数据,所以配对总数是
3行(one) × 3行(two)= 9行。 - 你只选择了
one.email,所以one里的每一行email都会对应two的3行各输出一次——也就是原表的3个email值,每个都重复3次,最终就出现了9行结果。
举个具体的配对逻辑:
one的第1行(a@b.com)会和two的3行分别组合,输出3次a@b.comone的第2行(c@d.com)会和two的3行分别组合,输出3次c@d.comone的第3行(a@b.com)会和two的3行分别组合,输出3次a@b.com
加起来就是你看到的9条数据。如果想要避免这种情况,你需要添加连接条件(比如ON one.id = two.id)或者过滤条件(比如WHERE one.email = two.email)来限制配对的行数。
内容的提问来源于stack exchange,提问作者Secret Secrets
相关产品推荐
相关产品推荐

