笛卡尔积与条件顺序

忘了写 ON 条件,或用了 CROSS JOIN,两表就会两两相乘——这就是笛卡尔积。几万行的两张表一乘就是上亿行,是 JOIN 最危险的事故来源。

笛卡尔积与条件顺序要点

笛卡尔积与条件顺序示例

						-- 忘记 ON:user 每一行都和 product 每一行配对(危险!)
						SELECT u.user_name, p.product_name
						FROM user u
						CROSS JOIN product p;

						-- 正确写法:补上关联键,结果才是有意义的行
						SELECT u.user_name, p.product_name
						FROM user u
						INNER JOIN orders o ON u.user_id = o.user_id
						INNER JOIN order_item oi ON o.order_id = oi.order_id
						INNER JOIN product p ON oi.product_id = p.product_id;
避坑提醒:生产环境跑多表 JOIN 前,先 SELECT COUNT(*) 看行数是否合理,暴涨几个数量级就是 ON 条件掉了。
笛卡尔积与条件顺序 · JOIN 多表连接 知识卡片
卡片 08 / 08 · JOIN 多表连接(1080×1440 速查卡片)

JOIN 多表连接知识点