2009-12-23 3 views
2

я в основном есть две таблицы:Как присоединиться к таблицам MySQL?

A(id int, name varchar(10), info varchar(10)) 
B(id int, item varchar(10)) 

A 
1 A Hello 
2 B World 
3 C Foo 

B 
1 apple 
1 orange 
1 hammer 
2 glass 
2 cup 

Обратите внимание, что C не имеет каких-либо предметов. Я хочу, чтобы объединить эти две таблицы, чтобы получить это:

1 A Hello apple|orange|hammer 
2 B World glass|cup 
3 C Foo null 

Я знаком с GROUP_CONCAT(item SEPARATOR '|') концепцией, но я не совсем уверен, как написать запрос, особенно, чтобы получить строку с 3 C Foo null

ответ

4
mysql> SELECT a.id, a.name, a.info, group_concat(b.item SEPARATOR '|') 
     FROM a 
     LEFT OUTER JOIN b ON (a.id=b.id) 
     GROUP BY 1,2,3;                
+------+------+-------+------------------------------------+ 
| id | name | info | group_concat(b.item separator '|') | 
+------+------+-------+------------------------------------+ 
| 1 | A | Hello | apple|orange|hammer    | 
| 2 | B | World | glass|cup       | 
| 3 | C | Foo | NULL        | 
+------+------+-------+------------------------------------+ 

Внешние соединения объяснил: http://en.wikipedia.org/wiki/Join_(SQL)#Outer_joins

+1

@Ed: LEFT OUTER JOIN так же, как LEFT JOIN – Fortega

+0

Спасибо, это работает! –

0

ВЫБРАТЬ a.id, a.name, a.info, GROUP_CONCAT (b.name Сепаратор '|') ОТ А КАК в LEFT OUTER JOIN B AS B ON b.id = A.id GROUP BY A.id

возвращается

идентификатор имя Информация GROUP_CONCAT (b.name Сепаратор '|')
1 привет яблоко | оранжевый | молотковые
2 B World стекла | чашка
3 C Foo NULL

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