Seite 1 von 1

SQL Frage - Wo sind die Profis?

Verfasst: Sonntag 15. Januar 2012, 18:56
von JVereinUser
Hallo,

kann ich 2 Abfrageergebnisse vereinen?

D.h. ich mache eine Abfrage beispielsweise für ID, NAME und eine für ID, NACHNAME.
Anschließend möchte ich aus diesen Ergebnissen ID, NAME, ID, NACHNAME machen?
Geht das?

Grüße von JD

Re: SQL Frage - Wo sind die Profis?

Verfasst: Sonntag 15. Januar 2012, 20:27
von heiner
Hallo JVereinUser,

in welcher Tabelle hast du denn das Feld Nachname?

Heiner

Re: SQL Frage - Wo sind die Profis?

Verfasst: Montag 16. Januar 2012, 07:16
von JVereinUser
heiner hat geschrieben:
in welcher Tabelle hast du denn das Feld Nachname?

Heiner
Nachname war nur ein Beispiel,
es könnte auch Strasse oder Postleitzahl heißen.

Die Frage ist dann nur, wenn es mir gelingt zwei Abfragen zu entwerfen,
die folgende Ergebnisse erzeugen,
z.B. ID, Strasse und ID, Postleitzahl,
dann würde ich basierend auf diesen Ergebnissen nochmals eine Vereinigungsmenge durchführen.

Ich meine union select wäre dazu möglich,
aber das klappt nicht.

Grüße,
JD

Re: SQL Frage - Wo sind die Profis?

Verfasst: Montag 16. Januar 2012, 11:07
von heiner
Hallo JVereinUser,

was genau hast du vor?

Wenn du zunächst ID und Name selektierst und anschließend ID und PLZ und diese wieder über die ID verschneiden willst, kannst doch gleich ID, Name und PLZ selektieren.

Heiner

Re: SQL Frage - Wo sind die Profis?

Verfasst: Montag 16. Januar 2012, 12:22
von JVereinUser
Ich möchte in der Tabelle Zusatzfelder,
jedes Zusatzfeld als Spalte darstellen.
Bei 3 Zusatzfeldern ergeben sich 3 Spalten.
Die Lösung mit den Einzelabfragen und einer Vereinigung scheint mir am einfachsten zu sein.

JD

Re: SQL Frage - Wo sind die Profis?

Verfasst: Montag 16. Januar 2012, 13:19
von heiner

Re: SQL Frage - Wo sind die Profis?

Verfasst: Samstag 21. Januar 2012, 00:41
von Boby
Hallo JD,
D.h. ich mache eine Abfrage beispielsweise für ID, NAME und eine für ID, NACHNAME.
Anschließend möchte ich aus diesen Ergebnissen ID, NAME, ID, NACHNAME machen?
Geht das?
ja, das geht natürlich in Standard-SQL - sogar relativ leicht.

Die Syntax schaut ungefähr so aus:
SELECT t1.ID, t1.NAME, t2.NACHNAME
FROM tabelle1 t1, tabelle2 t2
WHERE t1.ID = t2.ID;

Und das sollte es auch schon wieder gewesen sein.
Extrem wichtig ist, dass Du immer die Felder sauber ausqualifizierst - sprich: die Datenbank soll nicht raten müssen, welche "ID" aus welcher Tabelle Du meinst - sondern immer mit dem Präfix ausqualifizieren.

Diese Syntax geht übrigens nur dann, wenn es immer in BEIDEN Tabellen Sätze gibt. Wenn mal einer wo fehlt (egal ob in der ersten oder der zweiten), dann fehlt auch das Ergebnis (das ist eine der Eigenschaften des sog. INNER JOINS) - quasi eine logische UND-Verknüpfung.

Alternativ dazu gibt's die OUTER JOINS - die schreibt man ein wenig anders:

SELECT t1.ID, t1.NAME, t2.NACHNAME
FROM tabelle1 t1 LEFT JOIN tabelle2 t2
ON t1.ID = t2.ID;

Mit dem LEFT bestimmst Du, welche Tabelle die "führende" ist - sprich: In dieser Tabelle MUSS der Datensatz da sein, damit er auch ins Result set kommt. Bei der anderen ist es egal, ob der Satz da ist oder nicht.
Wenn die Begriffe aber immer verlässlich in beiden Tabellen paarweise (oder auch öfters) vorkommen, dann kannst Du aber auf den einfacheren Inner Join zurückgreifen.

LG,
Boby