2013-05-10 41 views
1

我有兩個表,titleterritory。領地告訴我在哪裏,標題是可供選擇:在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 2013-05-10 22:08:42

+0

這不是SQL中「外連接」的含義。內連接和外連接之間的區別僅在於連接表中沒有匹配的行發生的情況。 – Barmar 2013-05-10 22:21:24

回答

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