J'ai deux tables simples pour ce sujet:cartésien SQL produit/Cross Rejoindre direction
abc numbers
+--------+ +--------+
| letter | | number |
+--------+ +--------+
| a | | 1 |
| b | | 2 |
+--------+ | 3 |
+--------+
Requête:
SELECT letter, number
FROM abc
CROSS JOIN numbers;
Résultat:
+--------+--------+
| letter | number |
+--------+--------+
| a | 1 |
| b | 1 |
| a | 2 |
| b | 2 |
| a | 3 |
| b | 3 |
+--------+--------+
Résultat attendu:
+--------+--------+
| letter | number |
+--------+--------+
| a | 1 |
| a | 2 |
| a | 3 |
| b | 1 |
| b | 2 |
| b | 3 |
+--------+--------+
Pourquoi n'est-ce pas sorti comme je l'avais prévu? D'après ce que j'ai lu sur les produits cartésiens dans ce article, il aurait fallu sortir comme je m'y attendais.
Quelqu'un peut-il expliquer étape par étape comment le résultat que j'ai été traité par MySql?
Ressemble aux boucles imbriquées avec des nombres comme table externe. Aucune commande n'est garantie sans commande par. –
Parce que les ensembles sont par définition non ordonnés sauf si explicitement ordonné. La réponse à votre question ne peut probablement être trouvée qu'en examinant le code source qui constitue le moteur MySQL, en particulier le processeur de requêtes et les optimiseurs associés. En fin de compte, est-ce important? – jpw