2010-02-02 5 views
0

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

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

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

Так что если 3 окорока с id 1, 2, и 3, и 3 яйца каждого метода приготовления пищи, мой ResultSet должен выглядеть примерно так:

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

Через немного мышления нешуточной и Googling, я, возможно, нашел хорошее решение:

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

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

+0

Он работает, да, но только потому, что вы 'не волнует, какое яйцо в particular'. Поведение SQL для выбора столбцов не в 'GROUP BY' не определено. Однако, по моему опыту, он всегда возвращает действительное значение. Кроме того, это будет работать только до тех пор, пока 'eggs' содержит хотя бы одно вхождение каждого значения в перечисление (конечно, похоже, что это довольно безопасное предположение). – cmptrgeekken

+0

Хорошо - я рад узнать, что на самом деле есть четко определенные ошибки, поскольку, если бы не было каких-либо очевидных, я уверен, что неясные появятся. Благодаря! – Matchu

+0

и mysql - это afaik, единственная база данных, которая позволит вам сделать это таким образом. – ysth

1
SELECT hams.id, eggs.how_cooked, eggs.id 
FROM hams 
    CROSS JOIN eggs 

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

MySQL 5.0 Reference - JOIN syntax

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