Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Eine Tabelle mehrmals im left join (https://www.delphipraxis.net/175538-eine-tabelle-mehrmals-im-left-join.html)

Ykcim 29. Jun 2013 12:46

Datenbank: MySQL • Version: 5 • Zugriff über: UniDac

Eine Tabelle mehrmals im left join
 
Hallo Zusammen,

ich komme gerade mit einer Abfrage nicht weiter und hoffe, dass Ihr mir helft.

Ich habe die User in einer Tabelle (User_ID, Name, ...)

In einer anderen Tabelle habe ich in jeder Zeile folgende Daten: ID, Daten1, User_ID1, Daten2, User_ID2, ...

Ich möchte jetzt in meiner Abfrage die Daten 1 und 2 die UserNamen 1 und 2 zu den User_IDs rausholen.

Hier ein Ansatz:
Delphi-Quellcode:
select DatenTabelle.Daten1, User.Username, DatenTabelle.Daten2, User.Username
from DatenTabelle
left join User on User.User_ID=DatenTabelle.User_ID1
left join User on User.User_ID=DatenTabelle.User_ID2 //Das gibt natürlich einen Fehler
Ich brauche also eine Möglichkeit, dass sich die Tabelle User auf unterschiedliche Felder der DatenTabelle beim left join bezieht.
Ich hoffe, mein Problem ist nachvollziehbar.

Vielen Dank
Patrick

mkinzler 29. Jun 2013 12:50

AW: Eine Tabelle mehrmals im left join
 
Verwende Aliase, dann geht das.

DeddyH 29. Jun 2013 12:50

AW: Eine Tabelle mehrmals im left join
 
Benutze Tabellenaliase.
SQL-Code:
SELECT
  DatenTabelle.Daten1,
  User1.Username,
  DatenTabelle.Daten2,
  User2.Username
FROM
  DatenTabelle
LEFT JOIN
  User User1 ON User1.User_ID=DatenTabelle.User_ID1
LEFT JOIN
  User User2 ON User2.User_ID=DatenTabelle.User_ID2

Ykcim 29. Jun 2013 14:34

AW: Eine Tabelle mehrmals im left join
 
Das verstehe ich leider nicht. Es gibt daoch auf meinem Server keine Tabelle User1 oder User2, sondern nur User. Wie muss ich das denn angeben, dass der MySQL-Server das versteht?

Vielen Dank
Patrick

mkinzler 29. Jun 2013 14:37

AW: Eine Tabelle mehrmals im left join
 
Usee1 und User2 sind Aliase für die Tabelle User. Sie sind Platzhalter für 2 Instanzen der Tabelle.
Zitat:

Wie muss ich das denn angeben, dass der MySQL-Server das versteht?
Genau so wie geschrieben

Ykcim 29. Jun 2013 14:55

AW: Eine Tabelle mehrmals im left join
 
Wer lesen kann ist klar im Vorteil...:oops:

Ich hatte überlesen, dass da "user user1." steht. Dann klappt es auch.

Vielen Dank und noch einen schönen Samstag

Patrick

DeddyH 29. Jun 2013 14:55

AW: Eine Tabelle mehrmals im left join
 
Vielleicht sollte ich mir angewöhnen, auch bei Tabellenaliasen das AS zu verwenden, ich mach das sonst nur bei Feldaliasen.

mkinzler 29. Jun 2013 15:01

AW: Eine Tabelle mehrmals im left join
 
Ich lasse es auch immer weg.

Sir Rufo 29. Jun 2013 17:16

AW: Eine Tabelle mehrmals im left join
 
Ich nehme für einen Alias immer einen sehr kurzen Namen (die Tabellen-Namen sind sprechend), dann weiß ich, dass es ein Alias ist ;)
SQL-Code:
SELECT
  d.Daten1,
  u1.Username,
  d.Daten2,
  u2.Username
FROM
  DatenTabelle d
LEFT JOIN
  User u1 ON u1.User_ID=d.User_ID1
LEFT JOIN
  User u2 ON u2.User_ID=d.User_ID2

DeddyH 29. Jun 2013 18:20

AW: Eine Tabelle mehrmals im left join
 
Ich eigentlich auch (allein schon aus Tippfaulheit), aber diesmal wollte ich das Prinzip besonders hervorheben. Ist wohl danebengegangen.

mkinzler 29. Jun 2013 18:48

AW: Eine Tabelle mehrmals im left join
 
Zitat:

Zitat von DeddyH (Beitrag 1220074)
Ich eigentlich auch (allein schon aus Tippfaulheit), aber diesmal wollte ich das Prinzip besonders hervorheben. Ist wohl danebengegangen.

Warum, dein Code war doch ok.

Sir Rufo 29. Jun 2013 19:22

AW: Eine Tabelle mehrmals im left join
 
Zitat:

Zitat von mkinzler (Beitrag 1220076)
Zitat:

Zitat von DeddyH (Beitrag 1220074)
Ich eigentlich auch (allein schon aus Tippfaulheit), aber diesmal wollte ich das Prinzip besonders hervorheben. Ist wohl danebengegangen.

Warum, dein Code war doch ok.

Aber wurde nicht auf Anhieb verstanden ;)
(und das war der Grund, warum er keine kurzen Alias-Namen verwendet hat)

Furtbichler 29. Jun 2013 19:25

AW: Eine Tabelle mehrmals im left join
 
Zitat:

Zitat von Sir Rufo (Beitrag 1220067)
Ich nehme für einen Alias immer einen sehr kurzen Namen (die Tabellen-Namen sind sprechend), dann weiß ich, dass es ein Alias ist ;)

So habe ich das bisher auch immer gemacht. Bei meinen Datenbanken. Bisher.
Zitat:

Zitat von DeddyH (Beitrag 1220074)
Ich eigentlich auch (allein schon aus Tippfaulheit), aber diesmal wollte ich das Prinzip besonders hervorheben. Ist wohl danebengegangen.

Nein, nein. Nur wenn alle als Aliasnamen 1 oder 2 Buchstaben nehmen, dann stichst Du heraus.

Wir haben hier eine Datenbank, bei der die Tabellen Namen wie 'CRIMKAM', 'CLIMADE', 'ERVIKAD', 'ACCMFTAS' usw. haben. Das hatten sich Spanier ausgedacht und meinten, wenn alle Tabellen genau 7 Buchstaben haben, wäre das cool.

Und dafür verwende ich nun z.B. Aliase mit sprechenden Namen. Dabei ist mir dann aufgefallen, das der Code dann irgendwie lesbarer wird. Ist ja auch logisch.

Und schlußendlich kann man auch bei Aliasen sprechende Namen verwenden, sofern es die Tabelle selbst nicht tut.

Ich meine, beim Programmieren brechen wir uns einen ab, ordentliche Bezeichner zu verwenden, wieso nicht bei SQL? Hier sind wir tippfaul (mich eingeschlossen)? Im Ernst?

DeddyH 29. Jun 2013 19:27

AW: Eine Tabelle mehrmals im left join
 
Meine Tabellen haben im Allgemeinen sprechende Namen. Da darf der Alias auch mal kürzer ausfallen, IMHO leidet die Lesbarkeit dadurch nicht sonderlich.

Ykcim 29. Jun 2013 21:06

AW: Eine Tabelle mehrmals im left join
 
Nun, ich habe auch u1... als Alias verwendet. Aber ich habe heute eine Menge über Alias gelernt.

Vielen Dank - das klappt prima!

Gruß
Patrick

joachimd 1. Jul 2013 08:44

AW: Eine Tabelle mehrmals im left join
 
und da USER sehr oft ein reserviertes wort ist, solltest Du es noch einpacken:
Code:
SELECT * FROM [USER] u1 --...

mkinzler 1. Jul 2013 08:52

AW: Eine Tabelle mehrmals im left join
 
Zitat:

Zitat von joachimd (Beitrag 1220209)
und da USER sehr oft ein reserviertes wort ist, solltest Du es noch einpacken:
Code:
SELECT * FROM [USER] u1 --...

Bzw. je nach DBMS auch

SQL-Code:
Select * from "USER" u1 ...

DeddyH 1. Jul 2013 08:58

AW: Eine Tabelle mehrmals im left join
 
Bei MySQL meist
SQL-Code:
SELECT * from `User` u1
, allerdings weiß ich nicht, wie UniDAC das intern handhabt.

p80286 1. Jul 2013 10:37

AW: Eine Tabelle mehrmals im left join
 
Zitat:

Zitat von DeddyH (Beitrag 1220081)
Meine Tabellen haben im Allgemeinen sprechende Namen. Da darf der Alias auch mal kürzer ausfallen, IMHO leidet die Lesbarkeit dadurch nicht sonderlich.

Wie üblich kommt's darauf an.
Ich hab mir angewöhnt für "offizelle" Abfragen immer ein "as" zu nutzen dadurch wird es übersichtlicher. Und Aliase wie T1,T2.. sind absolut tabu.

Gruß
K-H

DonManfred 2. Jul 2013 06:16

AW: Eine Tabelle mehrmals im left join
 
Zitat:

Zitat von p80286 (Beitrag 1220226)
Ich hab mir angewöhnt für "offizelle" Abfragen immer ein "as" zu nutzen dadurch wird es übersichtlicher.

Geradebei jemandem "noch nicht so Fit" ist in Bezug auf Aliase ist ist die Verwendung von AS sicherlich auch von Vorteil. Ich bin inzw relativ Fit in solchen Dingen aber auch ich benutze lieber immer noch AS um die Leserlichkeit zu erhöhen (vor allem wenn jemand anderes mal in den Code schaut).


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz