SQL笛卡尔积/交叉连接方向
SQL Cartesian Product / Cross Join direction
我有两个关于这个主题的简单表格:
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 处理的吗?
结果集是一样的。 SQL 结果集没有排序,除非您指定 order by
。两者包含相同的行,因此它们是相同的。
如果您期望按特定顺序查询 return 行,而您没有使用 order by
,那么您的期望完全错误。
我有两个关于这个主题的简单表格:
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 处理的吗?
结果集是一样的。 SQL 结果集没有排序,除非您指定 order by
。两者包含相同的行,因此它们是相同的。
如果您期望按特定顺序查询 return 行,而您没有使用 order by
,那么您的期望完全错误。