SQL Cartesian Product / Cross Join方向

时间:2015-07-26 19:29:29

标签: mysql cartesian-product cross-join

我有两个关于这个主题的简单表:

   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中所读到的有关笛卡儿产品的内容,它应该按照我的预期出现。

enter image description here

任何人都可以逐步解释我得到的结果是如何由MySql处理的?

1 个答案:

答案 0 :(得分:3)

结果集是相同的。除非您指定order by,否则SQL结果集没有排序。两者都包含相同的行,因此它们是相同的。

如果您希望查询以特定顺序返回行而您没有使用order by,那么您的期望就是错误的。