Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Select mit FK und where-Klausel in einer einzigen Tabelle (https://www.delphipraxis.net/184990-sql-select-mit-fk-und-where-klausel-einer-einzigen-tabelle.html)

Nils S. 6. Mai 2015 12:29

SQL Select mit FK und where-Klausel in einer einzigen Tabelle
 
Guten Tag zusammen,

ich stehe vor einem, für mich, etwas komplizierterem Rätsel.

Ich arbeite mit einer SQL-Datenbank und habe dort eine Tabelle mit Artikeln.
Diese enthält unter anderem die Spalten

ID --- Artikelnummer --- Revision --- Vorgängerartikel_FK(Enthält ID des Vorgängerartikels)

Nun will ich ein select ausführen, wessen Ergebnis die ID, Artikelnummer, Revision und Artikelnummer + Revision des Vorgängerartikels enthält.

Ich kann also ein

Select
ID,
Artikelnummer,
Revision,
from
Artikel;

ausführen, um den leichten Teil zu erledigen. Klappt natürlich auch wunderbar.

Wenn ich mir das Ganze so umbaue

Select
ID,
Artikelnummer,
Revision,
Artikelnummer + ' - ' + Revision as Vorgängerartikel (die "SQL-und-Zeichen" kriege ich hier nicht hin, deswegen das "+")
from
Artikel
where
Artikel.ID = Artikel.Vorgängerartikel;

funktioniert das nicht, ist ja auch einleuchtend...

Aber wie kann ich das realisieren, ohne eine zweiite Tabelle zu haben, bzw. geht das überhaupt oder macht man sowas lieber erst gar nicht?

Sherlock 6. Mai 2015 12:38

AW: SQL Select mit FK und where-Klausel in einer einzigen Tabelle
 
Grundsätzlich kannst Du die gleiche Tabelle natürlich mehrmals abfragen, mit verschiedenen Aliasen halt ;)

Sherlock

jobo 6. Mai 2015 12:56

AW: SQL Select mit FK und where-Klausel in einer einzigen Tabelle
 
Zitat:

Zitat von Sherlock (Beitrag 1300428)
Grundsätzlich kannst Du die gleiche Tabelle natürlich mehrmals abfragen, mit verschiedenen Aliasen halt ;)

Sherlock

Ich ergänze noch, dass deine Notation zwar möglich ist, ein outer join aber wahrscheinlich geeigneter, schneller je nach Datenbanksystem.
Nicht jeder Artikel hat wohl einen Vorgänger, selbst wenn der Shop aus der Steinzeit ist.

Jumpy 6. Mai 2015 12:59

AW: SQL Select mit FK und where-Klausel in einer einzigen Tabelle
 
So Vieleicht?

SQL-Code:
Select
  A.ID,
  A.Artikelnummer,
  A.Revision,
  V.Artikelnummer + ' - ' + V.Revision as Vorgängerartikel
From
  Artikel A
Left Join
  Artikel V
On
  V.ID = A.Vorgängerartikel_FK
Hättest das auch gut in der Datenbank-Sektion posten können.

Nils S. 6. Mai 2015 13:41

AW: SQL Select mit FK und where-Klausel in einer einzigen Tabelle
 
Uhi, das ging ja schnell...xD
Danke für die ganzen Lösungen.

Das mit den Aliases ist ne coole Sache, aber über ein einfaches select fehlen dann die Einträge, wo es keinen Vorgänger gibt.
Das meine jobo wohl.

Der Left Join gefällt mir.

Danke. :)

mkinzler 6. Mai 2015 13:44

AW: SQL Select mit FK und where-Klausel in einer einzigen Tabelle
 
Zitat:

Das mit den Aliases ist ne coole Sache, aber über ein einfaches select fehlen dann die Einträge, wo es keinen Vorgänger
gibt.
Das hat nichst mit den Aliasen zu tun, sondern das der implizite Join immer ein inner Join ist.

Nils S. 6. Mai 2015 14:07

AW: SQL Select mit FK und where-Klausel in einer einzigen Tabelle
 
Ok.

Gibt es denn eine Möglichkeit, dass ich noch eine where Klausel für eine Zusätzliche Bedingung einbauen kann?
Oder gehen alle zusätzlichen Bedingungen jetzt ebenfalls nur noch über einen Join?

TBx 6. Mai 2015 14:25

AW: SQL Select mit FK und where-Klausel in einer einzigen Tabelle
 
einfach where-clause hinten anhängen

mkinzler 6. Mai 2015 14:25

AW: SQL Select mit FK und where-Klausel in einer einzigen Tabelle
 
Im Join (on) sollten nur die Bedingungen für disen stehen und die anderen Einschränkungen wie gehabt in der where clause.

DP-Maintenance 6. Mai 2015 14:25

Dieses Thema wurde am "06. May 2015, 15:25 Uhr" von "TBx" aus dem Forum "Programmieren allgemein" in das Forum "Datenbanken" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr.

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