2017-03-08 41 views
1

我想讓我的頭部纏繞連接。 我嘗試了許多連接但沒有成功。根據第三個主表查詢2個表格

考慮以下表:

Allsongs

+--------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+--------+--------------+------+-----+---------+-------+ 
| ID  | int(11)  | NO | PRI | NULL |  | 
| Artist | varchar(100) | YES |  | NULL |  | 
| Title | varchar(100) | YES |  | NULL |  | 
+--------+--------------+------+-----+---------+-------+ 

幾個不同的藝術家表:即貓王,披頭士等

+--------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+--------+---------+------+-----+---------+-------+ 
| ID  | int(11) | NO | PRI | NULL |  | 
| Songid | int(11) | YES |  | NULL |  | 
+--------+---------+------+-----+---------+-------+ 

在藝術家表中的Songid場是相同的allsongs .id字段

我想創建一個查詢th在將加入以下查詢到一個查詢

select s.title from allsongs s 
join beatles b ON s.id = b.songid; 

select s.title from allsongs s 
join elvis e ON s.id = e.songid; 

我想這可能工作:

select s.title from allsongs s 
join beatles b ON s.id = b.songid 
join elvis e ON s.id = e.songid; 

但它提供了:空集。

如果我使用LEFT OUTER JOIN它做什麼,我想只要我限制我希望我是不夠清晰的行數手動

。任何幫助,將不勝感激。

謝謝

回答

0

你可以用union來做到這一點。兩個查詢都需要以相同的數據類型順序返回相同數量的列。列名來自第一個選擇語句,以防您想通過之後的任何類似命令執行命令。

(select s.title from allsongs s 
join beatles a ON s.id = a.songid) 
union all 
(select s.title from allsongs s 
join elvis a ON s.id = a.songid); 
+0

優秀。這工作除了一個問題。結果是其中一個標題是兩個藝術家,因此它只返回其中的一個。有沒有辦法解決這個問題呢,還是僅僅是由於表結構? – Pete

+0

將其更改爲「UNION ALL」而不是工會。這將顯示重複的行。 – Ilion