Heureusement, je n'ai pas eu à travailler avec des requêtes SQL particulièrement complexes auparavant. Voici mon objectif.Requête MySQL impliquant une jointure croisée, unicité, etc.
J'ai la table hams
, que je voudrais joindre avec la table eggs
- c'est-à-dire, obtenir toutes les combinaisons de jambon-oeuf ... dans une certaine mesure. Le tableau eggs
a également un attribut how_cooked
, défini comme ENUM('over-easy','scrambled','poached')
. Je voudrais un ensemble de résultats énumérant toutes les combinaisons possibles de jambon et de méthode de cuisson des œufs, ainsi qu'un échantillon d'œuf cuit de cette façon. (je ne me soucie pas que l'œuf en particulier.)
Donc, si 3 jambons avec id
de 1, 2 et 3, et 3 oeufs de chaque méthode de cuisson, mon resultset devrait ressembler à ceci:
+---------+-----------------+---------+
| hams.id | eggs.how_cooked | eggs.id |
+---------+-----------------+---------+
| 1 | over-easy | 1 |
| 1 | scrambled | 4 |
| 1 | poached | 7 |
| 2 | over-easy | 1 |
| 2 | scrambled | 4 |
| 2 | poached | 7 |
| 3 | over-easy | 1 |
| 3 | scrambled | 4 |
| 3 | poached | 7 |
+---------+-----------------+---------+
Je suis sûr que je pourrais bidouiller une solution avec des tas de sous-requêtes ici et là, mais est-ce qu'il y a une manière élégante de faire ceci est MySQL?
Il fonctionne, oui, mais seulement parce que vous 'ne se soucient pas que l'œuf dans particular'. Le comportement SQL pour la sélection de colonnes non dans un GROUP BY n'est pas bien défini. Cependant, d'après mon expérience, il renvoie toujours une valeur valide. En outre, cela ne fonctionnera que tant que 'eggs' contient au moins une occurrence de chaque valeur dans l'énumération (bien sûr, il semble que ce soit une hypothèse assez sûre). – cmptrgeekken
Bon - Je suis heureux de savoir qu'il y a, en fait, des pièges bien définis, car s'il n'y en avait pas de plus évidents, je suis sûr que d'obscurs apparaîtraient. Merci! – Matchu
et mysql est afaik la seule base de données qui vous permettra de le faire de cette façon – ysth