2013-03-09 42 views
20

我需要從3個表得到不同的值不同的值。如何選擇從多個表

當我執行此代碼:

select DISTINCT(city) from a,b,c 

我得到它說,我的專欄「城市」是不明確的錯誤。

而且我已經試過這樣:

select DISTINCT(city) from a NATURAL JOIN b NATURAL JOIN c 

有了這個代碼,我收到我的表什麼。

讓我告訴你關於我所試圖做的例子:

TABLE A    TABLE B    TABLE C 
id | city   id | city   id | city 
1 | Krakow   1 | Paris   1 | Paris 
2 | Paris   2 | London   2 | Krakow 
3 | Paris   3 | Oslo 
4 | Rome 

而且我需要得到像這樣

RESULTS 
city 
---- 
Krakow 
Paris 
Rome 
London 
Oslo 

城市的順序並不重要,我我只需要全部擁有它們,每個城市只能有一個代表。

有什麼想法?我正在考慮在JOIN中使用id's,但沒有連接,所以我不能使用它。

回答

40

UNION關鍵字將結果列表返回unique記錄。當指定ALLUNION ALL)將繼續重複的結果集,其中OP不想要的。

SELECT city FROM tableA 
UNION 
SELECT city FROM tableB 
UNION 
SELECT city FROM tableC 

結果

╔════════╗ 
║ CITY ║ 
╠════════╣ 
║ Krakow ║ 
║ Paris ║ 
║ Rome ║ 
║ London ║ 
║ Oslo ║ 
╚════════╝ 
+0

正是我需要的。這UNION就像DISTINCT?你能解釋一下嗎? – 2013-03-09 12:44:18

+0

爲什麼人們會給你打架票?這是正確的答案 – 2013-03-09 12:45:39

+0

我不知道爲什麼這個答案已被低估。呵呵據我所知,我明白了這個問題。 ':''讓我們聽從downvoter的觀點。 – 2013-03-09 12:45:44

3
SELECT city FROM A 
UNION DISTINCT 
SELECT city FROM B 
UNION DISTINCT 
SELECT city FROM C 
+2

這也產生正確的答案,但你爲什麼需要添加'和'UNION'總是返回唯一的記錄,除非'ALL'是DISTINCT'關鍵字指定? [SQL Fiddle演示](http://www.sqlfiddle.com/#!2/442ef/7) – 2013-03-09 12:48:58

+1

你說得很對。 「UNION」默認爲「UNION DISTINCT」(而不是「UNION ALL」) – 2013-03-10 11:52:38