You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL自连接查询为何输出3份原表数据?求技术解释

问题解释:为什么查询返回9条重复数据?

你写的查询触发了笛卡尔积(Cross Join),这是数据库未指定连接条件时的默认行为:

  1. 当你在FROM子句里同时声明Person AS one, Person AS two,但没加任何ON或WHERE过滤条件时,MySQL会把one表的每一行和two表的每一行进行全量配对。
  2. 你的Person表共有3行数据,所以配对总数是 3行(one) × 3行(two)= 9行。
  3. 你只选择了one.email,所以one里的每一行email都会对应two的3行各输出一次——也就是原表的3个email值,每个都重复3次,最终就出现了9行结果。

举个具体的配对逻辑:

  • one的第1行(a@b.com)会和two的3行分别组合,输出3次a@b.com
  • one的第2行(c@d.com)会和two的3行分别组合,输出3次c@d.com
  • one的第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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:35:03