2014-11-25 3 views
0

У меня есть данные в двух таблицах:Mysql - объединить две таблицы

таблица продукты

ID | title 
1 | T-shirt 
2 | Pants 
... 

и деталь таблицы

productID | key | value 
1   | color | green 
1   | size | M 
1   | size | L 
2   | color | white 
2   | color | black 
2   | brand | n/a 
... 

Таким образом, каждый продукт в таблице имеет много Детали. Я хотел бы написать SQL, которые дают мне результат:

ID | title | color  | size | brand 
1 | T-shirt | green  | M,L | 
2 | Pants | white,black |  | n/a 

Сейчас мой первый SQL является:

SELECT * FROM products; 

, а затем в то время как петли каждый раз, когда я называю:

SELECT * FROM details WHERE productID={id} 

и затем объединить данные вместе. Может быть, простой способ? Спасибо!

Редактировать: Данные были импортированы в mysql, и я не знаю всех деталей для каждого продукта (если бы я знал, чем положить некоторые дополнительные столбцы в таблицу продуктов). И детали меняются каждый день.

+0

Вы должны работать на ваша структура таблицы какая-то. Это поможет вам лучше управлять результатами. –

+0

Почему вы хотите объединить эти 2 таблицы? – Jaylen

+0

Вам нужно узнать о 3NF – Andrew

ответ

2

Я хотел бы сделать это с помощью условного агрегацию и group_concat():

select p.id, p.title, 
     group_concat(case when key = 'color' then value end) as colors, 
     group_concat(case when key = 'size' then value end) as sizes, 
     group_concat(case when key = 'brand' then value end) as brands 
from products p join 
    details d 
    on p.id = d.productid 
group by p.id, p.title; 
-1

Как я понимаю, вопрос, который вы хотели бы таблицу результатов с данными из обеих таблиц:

select products.ID, products.title, details.* 
from products 
inner join details 
on details.productID = products.ID; 
Смежные вопросы