2012-02-15 5 views
1

Проведя довольно много времени, пытаясь искупить некоторых решаров, я наконец сдаюсь и прошу вас, ребята, за вашу помощь. Это то, что мои таблицы MySQL выглядит следующим образом:Как выбрать более двух таблиц?

Table1:

 
Parent_ID | ID | Name | Quality |Price 
1   | 001|Apple | good |1.50 
1   | 002|Apple | medium |1.20 
1   | 003|Apple | poor |0.99 
2   | 004|Car | good |5000.00 
2   | 005|Car | poor |200.00 

Table2:

 
Parent_ID | Var_Name | Value 
1   | color | red 
1   | size  | big 
1   | rating | 3 Star 
2   | color | blue 
2   | size  | medium 
2   | rating | ok 

Ok.So пор так хорошо. Что мне нужно сейчас запрос, который дает мне это:

 
Parent_ID | ID | Name | Quality | Price | color | size | rating 
1   | 001 | Apple | good | 1.50 | red | big | 3Star 
1   | 002 | Apple | medium | 1.20 | red | big | 3Star 
1   | 003 | Apple | poor | 0.99 | red | big | 3Star 
2   | 004 | Car | good | 5000.00 | blue | medium | ok 
2   | 005 | Car | poor | 200.00 | blue | medium | ok 
+1

Основываясь на ваших ожидаемых данных, я полагаю, что столбец 'ID' в' Table1' не используется в качестве ключа? – JYelton

+0

ВЫБОР table1.parentID, , если (table2.varname = 'цвет', table2.value, NULL), как 'цвет' ОТ table1, таблица2 ГДЕ table1.ID = table2.ID – user1212368

+0

Объединение двух таблиц, где оба имеют столбец 'parent_id' вызывает у меня тошноту. – JYelton

ответ

-1

Все, что вам нужно, это просто присоединиться к Верую ...

SELECT * 
FROM Table1 t1 
JOIN Table2 t2 
    ON t1.Parent_Id = t2.Parent_Id 
1
Select T1.Parent_ID, T1.ID, T1.Name, T1.Quality, T1.Price, 
    (select value from Table2 T2 where T2.Parent_ID = T1.Parent_ID and Var_Name = 'color') as color, 
    (select value from Table2 T2 where T2.Parent_ID = T1.Parent_ID and Var_Name = 'size') as size, 
    (select value from Table2 T2 where T2.Parent_ID = T1.Parent_ID and Var_Name = 'rating') as rating 
FROM Table1 T1 
+1

Посмотрите, как это работает, но это решение для мусора - это будет очень плохо с минимальными размерами стола - вы делаете 3 запроса PER ROW! См. Ответ Конрада о том, как это сделать. – Bohemian

5

Просто присоединиться к TABLE2 три раза фильтрации для var_name в разделе JOIN.

SELECT t.parent_id, 
     t.id, 
     t.name, 
     t.quality, 
     t.price, 
     c.VALUE AS color, 
     s.VALUE AS size, 
     r.VALUE AS rating 
FROM table1 t 
     LEFT JOIN table2 c 
     ON t.parent_id = c.parent_id 
      AND c.var_name = 'color' 
     LEFT JOIN table2 s 
     ON t.parent_id = s.parent_id 
      AND s.var_name = 'size' 
     LEFT JOIN table2 r 
     ON t.parent_id = r.parent_id 
      AND r.var_name = 'rating' 
+0

ЭТО ЭТО! Спасибо, ты сделал мой день (по крайней мере, утром :-) – user1212368

+0

Рад, что я могу помочь –

0

Существует еще один способ сделать это. Он использует только одно соединение, но вам нужно использовать агрегатные функции.

SELECT table1.*, 
max(if(table2.var_name='color',table2.value, NULL)) as color, 
max(if(table2.var_name='size',table2.value, NULL)) as size, 
max(if(table2.var_name='rating',table2.value, NULL)) as rating, 
FROM table1 join table2 
WHERE table1.ID = table2.ID 
GROUP BY table.* 
Смежные вопросы