2013-03-09 15 views
20

Potrzebuję uzyskać różne wartości z 3 tabel.Jak wybrać odrębną wartość z wielu tabel

Kiedy wykonać ten kod:

select DISTINCT(city) from a,b,c 

pojawia się błąd, który mówi, że moja kolumna „miasto” jest niejednoznaczna.

Również próbowałem to:

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

Z tym kodem otrzymam nic z moich tabel.

Pokażę ci, na przykład to, co próbuję zrobić:

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 

I trzeba uzyskać wynik jak ten

RESULTS 
city 
---- 
Krakow 
Paris 
Rome 
London 
Oslo 

Zakonu miast nie jest dla mnie ważne Po prostu potrzebuję ich wszystkich i powinna istnieć tylko jedna reprezentacja każdego miasta.

Każdy pomysł? Myślałem, aby użyć id's w JOIN, ale nie ma połączenia, więc nie mogę tego użyć.

Odpowiedz

40

Słowo kluczowe UNION zwróci unique rekordów na liście wyników. Podczas określania ALL (UNION ALL) zachowają duplikaty na zestawie wyników, czego nie chce OP.

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

WYNIK

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

Dokładnie to, czego potrzebują. Ta UNIA jest jak DISTINCT? możesz to trochę wyjaśnić? –

+0

Dlaczego ludzie dawali ci głosy? To jest poprawna odpowiedź –

+0

Nie wiem, dlaczego ta odpowiedź została odrzucona. hehe O ile mi wiadomo, zrozumiałem pytanie. ':)' Posłuchajmy z punktu widzenia downwizera. –

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

to również tworzy poprawną odpowiedź, ale dlaczego musisz dodać słowo kluczowe "DISTINCT" z 'UNION' zawsze zwróci unikalne rekordy, chyba że' ALL' jest określony? [SQL Fiddle Demo] (http://www.sqlfiddle.com/#!2/442ef/7) –

+1

Masz całkowitą rację. "UNION" domyślnie "UNION DISTINCT" (zamiast "UNION ALL") –