SQL Frage - Wo sind die Profis?

Hier können die JVerein-Frischlinge ihre Fragen stellen.

Moderator: heiner

Antworten
JVereinUser
Beiträge: 9
Registriert: Montag 2. Januar 2012, 18:15

SQL Frage - Wo sind die Profis?

Beitrag 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
Benutzeravatar
heiner
Administrator
Beiträge: 4510
Registriert: Freitag 30. Oktober 2009, 16:44
JVerein-Version: aktuelle Entwicklerversion
Betriebssystem: W10
Kontaktdaten:

Re: SQL Frage - Wo sind die Profis?

Beitrag von heiner »

Hallo JVereinUser,

in welcher Tabelle hast du denn das Feld Nachname?

Heiner
PS: Denkt daran, eure Vereine unter viewforum.php?f=3 vorzustellen.
JVereinUser
Beiträge: 9
Registriert: Montag 2. Januar 2012, 18:15

Re: SQL Frage - Wo sind die Profis?

Beitrag 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
Benutzeravatar
heiner
Administrator
Beiträge: 4510
Registriert: Freitag 30. Oktober 2009, 16:44
JVerein-Version: aktuelle Entwicklerversion
Betriebssystem: W10
Kontaktdaten:

Re: SQL Frage - Wo sind die Profis?

Beitrag 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
PS: Denkt daran, eure Vereine unter viewforum.php?f=3 vorzustellen.
JVereinUser
Beiträge: 9
Registriert: Montag 2. Januar 2012, 18:15

Re: SQL Frage - Wo sind die Profis?

Beitrag 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
Benutzeravatar
heiner
Administrator
Beiträge: 4510
Registriert: Freitag 30. Oktober 2009, 16:44
JVerein-Version: aktuelle Entwicklerversion
Betriebssystem: W10
Kontaktdaten:

Re: SQL Frage - Wo sind die Profis?

Beitrag von heiner »

PS: Denkt daran, eure Vereine unter viewforum.php?f=3 vorzustellen.
Boby
Beiträge: 28
Registriert: Freitag 20. Januar 2012, 21:54

Re: SQL Frage - Wo sind die Profis?

Beitrag 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
Antworten