2015-07-26 3 views
0

У меня есть два простых таблиц для этой теме:SQL декартова продукта/Cross Регистрация направление

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 объяснить?

+2

Выглядит как вложенные циклы с цифрами в качестве внешней таблицы. Никакой заказ не гарантируется без заказа. –

+1

Поскольку наборы по определению неупорядочены, если явно не упорядочены. Ответ на ваш вопрос, вероятно, можно найти только путем изучения исходного кода, который составляет двигатель MySQL, в частности процессор запросов и связанные с ним оптимизаторы. В конце концов, имеет значение, почему? – jpw

ответ

3

Результирующие наборы - то же самое. SQL-результирующие наборы не имеют порядка, если вы не укажете order by. Оба содержат одни и те же строки, поэтому они одинаковы.

Если вы ожидаете, что запрос вернет строки в определенном порядке, и вы не используете order by, то ваше ожидание просто неверно.

+0

ОК хорошо имеет смысл. –

+0

Я собираюсь опубликовать еще один вопрос, немного связанный с этим. –

Смежные вопросы