2016-06-03 40 views
-1

Ich habe 2 Tabellen mit einer 1: n-Beziehung. Ich möchte sie verbinden, ohne die Werte aus der einen Tabelle zu wiederholen (zu duplizieren).SQL Joining 2 Tabellen ohne wiederholende Werte

Erstens, ich habe eine Tabelle mit Budgets:

id name budget 
1 John 1000 
2 Kim 3000 

Und zweitens habe ich eine Tabelle von Spendings:

id amount 
1 112 
1 145 
1 211 

Das Ergebnis sollte wie folgt aussehen:

id name budget amount 
1 John 1000 112 
1 null null 145 
1 null null 211 
2 Kim 3000 null 

Ausgabe könnte auch sein: (das ist nicht wichtig)

id name budget amount 
1 null null 112 
1 John 1000 145 
1 null null 211 
2 Kim 3000 null 

Ist dies mit SQL möglich?

hier ein, dass beitreten wiederholt die Werte:

create temporary table a (id1 int,name varchar(10),budget int); 
insert into a (id1,name,budget) values(1,'Maier',1000),(2,'Mueller',2000); 
create temporary table if not exists b (id2 int,betrag int); 
insert into b (id2,betrag) values(1,100),(1,133),(1,234); 
select * from a left join b 
on a.id1=b.id2 
; 
+0

Sie könnten es leichter zu diesem im Client als in SQ finden L. Wohin geht der Output? – Mike

+0

Möglich? Ja. Ist es in SQL sinnvoll? Nicht wirklich, da Ihre Ergebnisse von der Reihenfolge abhängig sind, aber keine inhärente Art, sich selbst zu bestellen. – RBarryYoung

+0

Die Ausgabe ist temporär für die Verarbeitung durch ein Programm. Doing es im Client ist viel mehr Code. Es ist nicht auftragsabhängig, weil es mir egal ist, ob John in Zeile 1,2 oder 3 ist. – jms

Antwort

1

Das Schlüsselwort DISTINCT verwendet wird, doppelte Zeilen aus einem Abfrageergebnis zu beseitigen:

select distinct b.id, b.name, b.budget, s.amount 
from budgets b left join spendings s 
on b.id = s.id; 

Sie können auch Gruppen By-Klausel verwenden, die funktioniert ähnlich wie Distinct.In diesem Fall,

select b.id, b.name, b.budget, s.amount 
from budgets b left join spendings s 
on b.id = s.id 
group by b.id, b.name, b.budget, s.amount;