2013-05-10 2 views
1

У меня есть две таблицы, title и territory. Территория говорит мне, где название доступно:Сложность с центром в sql

`title` 
- id 
- name 

`territory` 
- title_id (FK) 
- territory 

Я хочу, чтобы выход выглядеть следующим образом:

id  name  territory  territory  territory  etc... 
1  Titanic US   GB   FR 

Я сейчас делаю в INNER JOIN, который дает мне три строки для выше вместо одного :

SELECT * FROM title inner join territory on title.id = territory.title_id 

Как бы я получить его в выводе выше, где athere является однорядные за титул, и все территории, перечислены в этой строке?

+0

Для этого вам нужен стержень, но, к сожалению, в mysql это очень сложно подражать. Как насчет того, чтобы все территории в одном выбранном столбце «территории»? – Sebas

+0

Это не то, что означает «внешнее соединение» в SQL. Разница между внутренним и внешним соединением заключается только в том, что происходит с строками, которые не совпадают в таблице соединения. – Barmar

ответ

2

Быстрая Альтернативным решением может быть агрегировать все территории в одной колонке:

SELECT t.id, t.name, GROUP_CONCAT(tr.territory, ',') AS `territories` 
    FROM title t 
     JOIN territory tr ON t.id = tr.title_id 
GROUP BY t.id, t.name 

Это, как правило, легко разделить результат в приложении после этого. Но если вы действительно хотите шарнир you'll have to be tricky.

Что касается вашего названия, здесь нет необходимости использовать внешние соединения, если вы не уверены, что название имеет затронутую территорию. В этом случае вместо этого используйте LEFT JOIN.

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