【发布时间】:2015-10-16 22:16:54
【问题描述】:
我有两个关于这个主题的简单表格:
abc numbers
+--------+ +--------+
| letter | | number |
+--------+ +--------+
| a | | 1 |
| b | | 2 |
+--------+ | 3 |
+--------+
查询:
SELECT letter, number
FROM abc
CROSS JOIN numbers;
结果:
+--------+--------+
| letter | number |
+--------+--------+
| a | 1 |
| b | 1 |
| a | 2 |
| b | 2 |
| a | 3 |
| b | 3 |
+--------+--------+
预期结果:
+--------+--------+
| letter | number |
+--------+--------+
| a | 1 |
| a | 2 |
| a | 3 |
| b | 1 |
| b | 2 |
| b | 3 |
+--------+--------+
为什么没有像我预期的那样出来?
根据我在article 中读到的有关笛卡尔积的内容,它应该如我预期的那样出现。
谁能一步步解释我得到的结果是如何被MySql处理的?
【问题讨论】:
-
看起来像以数字作为外部表的嵌套循环。没有order by,任何订单都无法保证。
-
因为集合根据定义是无序的,除非明确排序。您的问题的答案可能只能通过检查构成 MySQL 引擎的源代码来找到,特别是查询处理器和相关的优化器。最后,为什么重要?
标签: mysql cartesian-product cross-join