Как выбрать из двух таблиц? - PullRequest
1 голос
/ 16 февраля 2012

Потратив довольно много времени, пытаясь и успокаивая некоторых исследователей, я наконец сдаюсь и прошу вас за помощь.Вот как выглядят мои таблицы 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

Хорошо. Так хорошо.Теперь мне нужен запрос, который дает мне следующее:

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

Ответы [ 4 ]

5 голосов
/ 16 февраля 2012

Просто присоединитесь к 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' 
1 голос
/ 16 февраля 2012
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
0 голосов
/ 16 февраля 2012

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

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.*
0 голосов
/ 16 февраля 2012

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

SELECT *
FROM Table1 t1
JOIN Table2 t2
  ON t1.Parent_Id = t2.Parent_Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...