2013-03-09 33 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