2013-09-28 4 views
0

Я признаю, что это плохой заголовок, но я думаю, что это должно уточнить. Скажем, у меня есть таблица транспортных средств, который выглядит как этотMySQL Создайте результат с несколькими результатами из другой таблицы

Vehicles 

| vehicle_id | vehicle_name | vehicle_price | 
| 1   | pinto  | 70000   | 

Vehicle Options 

| vehicle_id | option_name | option_value | 
| 1   | color  | red   | 
| 1   | engine  | v8   | 

Как я могу получить все это обратно в один ряд ... в основном ряду транспортного средства с опциями, приложенных к нему.

| vehicle_id = 1 | vehicle_name = pinto | option_value = red | option_value(renamed) = V8 | 
+0

Пожалуйста, приведите пример результирующей таблицы, которую вы хотите; неясно, как вы хотите преобразовать несколько строк в столбцы (столбцы). –

+0

Yup ... спасибо – ed209

ответ

0

Вы хотите PIVOT записи, которые MySQL не не имеют функции по умолчанию на этом. Но вы все еще можете вручную сделать это с помощью MAX() и CASE.

SELECT a.vehicle_id, 
     a.vehicle_name, 
     a.vehicle_price, 
     MAX(CASE WHEN option_name = 'color' THEN option_value END) color, 
     MAX(CASE WHEN option_name = 'engine' THEN option_value END) engine 
FROM Vehicles a 
     INNER JOIN VehicleOptions b 
      ON a.vehicle_id = b.vehicle_id 
GROUP BY a.vehicle_id, 
      a.vehicle_name, 
      a.vehicle_price 

ВЫВОД

╔════════════╦══════════════╦═══════════════╦═══════╦════════╗ 
║ VEHICLE_ID ║ VEHICLE_NAME ║ VEHICLE_PRICE ║ COLOR ║ ENGINE ║ 
╠════════════╬══════════════╬═══════════════╬═══════╬════════╣ 
║   1 ║ pinto  ║   70000 ║ red ║ v8  ║ 
╚════════════╩══════════════╩═══════════════╩═══════╩════════╝ 
Смежные вопросы