Abfrage über zwei Tabellen

ordu52

Benutzer
Beiträge
15
Hallo,

ich habe mal wieder eine kleine Frage. Ich bin mir sicher, dass die Lösung sehr einfach ist, aber irgendwie komme ich auf keine optimale Lösung.

Ich habe zwei Tabellen.

Tabelle 1:
- ID
- Kundennr1
(knapp 100.000 Datensätze)

Tabelle 2:
- ID
- Kundennr2
(kanpp 30.000 Datensätze)

Ergebnis View soll sein:
- Spalte 1: Tabelle1.ID
- Spalte 2: Tabelle1.Kundennr1
- Spalte 3: soll sein wenn zur passen ID Kundennr2 existiert, dann Kundennummer ansonsten 0

ich habe es mit JOIN versucht. Als Ergebnis bekomme ich aber nur die 30000Datensätze, die auch in Tabelle 2 existieren. Also die restlichen Datensätze von Tabelle 1 werden einfach weggelassen.

Kann mir bitte jemand helfen?
 
Werbung:
Schau dir mal die verschiedenen Joins an.

1UKp7.png
 
Hallo vielen Dank für die schnellen Antworten. Ich habe es mit Full Outer Join gemacht.
Das sieht auch bisschen besser aus, trotzdem werden einige Datensätze abgeschnitten.

Ich möchte folgendes erreichen.
Tabelle 1 enthält 10000Datensätze. (ID, Kundennr1)
Tabelle 2 enthält 50000Datensätze. (ID, Kundennr2)

Ich möchte folgendes erreichen. Die Tabelle1 so wie es ist abgebildet werden mit den 10000Datensätzen.
Anschließen soll in einer neuen Spalte die Kundennr2 angezeigt werden, wenn zu der ID eine Kundennr2 gibt.
Falls es keine Kundennr2 zu demjenigen Datensatz gibt soll er den Wert 0 haben.

Also praktisch, dass ich als Ergebnis 10000Datensätze von Tabelle 1 habe + die neue Spalte von Tabelle 2.
Wenn Kundennr2 existiert, dann Nummer2 wenn nicht 0

Ich hoffe mir kann einer helfen
 
Klingt komisch, was Du da machst, aber vielleicht hilft Dir:

Code:
andreas@[local]:5432/test*# select * from t2;
 id | knr2
----+------
  1 |  1
  3 |  3
  5 |  5
(3 rows)

andreas@[local]:5432/test*# select t1.id, t1.knr1, t2.knr2 from t1 left join t2 on t1.id=t2.id and t1.knr1=t2.knr2;
 id | knr1 | knr2
----+------+------
  1 |  1 |  1
  2 |  2 |   
  3 |  3 |  3
  4 |  4 |   
  5 |  5 |  5
(5 rows)

andreas@[local]:5432/test*#

Was in Deinen Tabellen ist der Primary Key?
 
Hallo,

Zitat: " wenn zu der ID eine Kundennr2 gibt"
Wenn es zu der ID der ersten Tabelle, eine gleiche Nummer in der KundenNr2 Spalte hat...verstehe ich das richtig?
Der Join währe also
on Tabelle1.ID=Tabelle2.Kundennr2
schade sind die Kundennummern nicht gleich die ID's;-)

Jedenfalls würde ich akretschmer zustimmen: Riecht nach einem Left Join.

From Tabelle1
Left Join Tabelle2 on Tabelle1.ID=Tabelle2.Kundennr2

Aber: Die Wahrscheinlichkeit das ich es falsch verstanden habe, ist sehr hoch!!

Grüsse aus der Schweiz
Daniel
 
Zuletzt bearbeitet:
Hallo vielen vielen vielen Dank. Das Schlüsselwort war 'LEFT JOIN'.
DANKE hat bestens funktioniert :)

Eine ganz andere Frage hätte ich aber noch. Ich hoffe hier könnt Ihr mir auch helfen. Komme da nicht so ganz weiter.

Folgende Struktur:

Tabelle:
- ID (Schlüsselwort)
- Art (entweder Telefon oder Mobil)
- Telefonnummer (Telefonnummer)

Das Problem was ich habe ist, für eine ID kann es mehrere Telefonnummern geben, deswegen gibt es auch in der Tabelle mehrere Datensätze für eine ID. Ich möchte das ganze in einer View anpassen, sodass ich pro ID ein Datensatz habe, aber dafür die beide Telefonnummer in dem Datensatz habe.

Mein Ziel ist es folgendes in einem neuen View mit 4 Spalten zu haben

1. Spalte: ID
2. Spalte: Art (Where Art = 'Telefon') - nur Telefone
3. Spalte: Telefonnummer
4. Spalte: Telefonnummer2

Ich hoffe einer mir helfen. :(
 
Wozu die zweite Spalte, wenn diese immer fix ist?

Code:
test=*# select * from telefon;
 id |  art  | nummer
----+-------+--------
  1 | fest  | 123
  1 | mobil | 456
  2 | fest  | 234
  3 | mobil | 987
(4 Zeilen)

test=*# select id, string_agg(nummer,'') filter (where art = 'fest') as festnetz, string_agg(nummer,'') filter (where art = 'mobil') as mobilnetz from telefon group by id;
 id | festnetz | mobilnetz
----+----------+-----------
  1 | 123  | 456
  3 |  | 987
  2 | 234  |
(3 Zeilen)

test=*#

Falls FILTER (...) nicht verfpgbar ist mit CASE ... WHEN ... emulieren.
 
Hallo akretschmer,

vielen Dank für deine Antwort. Aber kannst du mir auch sagen, wie ich das realisiere, wenn von der gleichen ID zwei Art = fest Nummer sind. Also.

id | art | nummer
----+-------+--------
1 | fest | 123
1 | mobil | 456
1 | fest | 953
2 | fest | 234
3 | mobil | 987


wie könnte ich jetzt sagen, pack die erste fest Nummer in eine Spalte und die zweite Fest Nummer wenn vorhanden in die zweite Spalte?
 
Werbung:
Hallo Leute,

ich komme nicht mehr weiter. Kann mir vielleicht bitte jemand helfen.?
Ich habe die Tabelle zusammengeführt und momentan habe ich auch gruppiert nach ID, aber bei mir funktioniert String_AGG und GROUP_CONCAT nicht. Ich arbeite mit SQL SERVER 2014 Management Studio

Folgende aktuelle Tabelle:

id | Mobil | Webseite | Nummer
----+-------+------------------------------------
1 | 0152 | '' | 0825
2 | 6254 | '' | 0566
3 | '' | '' | 1566
4 | 562 | '' | 561
5 | '' | beispiel-.de | 56106

Es funktioniert auch alles. Mein einziges Problem momentan ist, dass wenn ich zwei Nummern eigentlich habe. Wählt er automatisch eins aus und die andere Nummer wird nicht dargestellt.
Wie kann ich in SQL SERVER 2014 erzeugen, dass beide Nummern getrennt von Komma dargestellt wird?
 
Zurück
Oben