MySQL-запрос, включающий перекрестное соединение, уникальность и т. Д. - PullRequest
0 голосов
/ 02 февраля 2010

К счастью, раньше мне не приходилось работать с особенно сложными SQL-запросами. Вот моя цель.

У меня есть таблица hams, которую я хотел бы скрестить с таблицей eggs - то есть получить все комбинации с ветчиной и яйцом ... до такой степени.

Таблица eggs также имеет атрибут how_cooked, который определяется как ENUM('over-easy','scrambled','poached'). Мне бы хотелось, чтобы в результирующем наборе были указаны все возможные комбинации метода варки с ветчиной и яйцом, а также образец яйца, приготовленный таким образом. Так что, если 3 ветчины с id из 1, 2 и 3 и 3 яйца каждого метода приготовления, мой набор результатов должен выглядеть примерно так:

+---------+-----------------+---------+
| 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       |
+---------+-----------------+---------+

Я уверен, что мог бы взломать какое-то решение с множеством подзапросов здесь и там, но есть ли какой-нибудь элегантный способ сделать это - MySQL?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2010

После долгих размышлений и поиска в Google, я мог бы найти хорошее решение:

SELECT * FROM hams, eggs GROUP BY hams.id, eggs.how_cooked

Кажется, работает. Неужели это так просто?

1 голос
/ 02 февраля 2010
SELECT hams.id, eggs.how_cooked, eggs.id
FROM hams
  CROSS JOIN eggs

Это делает трюк. CROSS JOIN является синонимом ,, но имеет более высокий приоритет в MySQL.

Справочник по MySQL 5.0 - синтаксис JOIN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...