Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi PostgreSQL - Abfrage aus 2 Tabellen (https://www.delphipraxis.net/119487-postgresql-abfrage-aus-2-tabellen.html)

NetSonic 27. Aug 2008 11:08

Datenbank: PostgreSQL • Version: 8.3.3 • Zugriff über: ADO

PostgreSQL - Abfrage aus 2 Tabellen
 
Hallo zusammen...

Leider habe ich gerade eine Denkblockade und brauche vielleicht nur einen kleinen Lösungsansatz:

Ich habe eine PostgreSQL Datenbank mit den Tabellen "tbladress" und "tbladress_groups".

tbladress enthält die Felder: AdressNo, GroupID, Name1, Name2, Name3;
tbladress_groups enthält die Felder: GroupID, GroupName;

Das Feld GroupID enthält jeweils die eindeutige ID einer Gruppe.

Wenn ich jetzt eine SQL-Abfrage ("Select * from tbladress;") mache, dann möchte ich nicht die ID der Gruppe, sondern den Namen der Gruppe aus der der Tabelle "tbladress_groups" angezeigt haben. Wie bekomme ich das hin?

mirage228 27. Aug 2008 11:18

Re: PostgreSQL - Abfrage aus 2 Tabellen
 
Ungetestet:
Code:
SELECT
  ta.*, tbg.GroupName
FROM
  tbladress ta, tbladress_groups tbg
WHERE
  ta.GroupID = tbg.GroupID
Überall wo ein Gruppenname zu der ID existiert, werden nun auch die Datensätze dazu selektiert.

Möchtest Du auch Datensätze ohne zugehörigen Eintrag in der Gruppen-Tabelle, musst Du einen expliziten JOIN benutzen :)

NetSonic 27. Aug 2008 11:28

Re: PostgreSQL - Abfrage aus 2 Tabellen
 
Naja, es ist so dass die Datensätze in der "tbladress" nicht alle einer Gruppe zugeordnet sind. Ich möchte aber natürlich alle Datensätze eingezeigt bekommen und da, wo eine "GroupID" zugeordnet ist, soll der "GroupName" stehen, bei den anderen fehlt diese Info dann und die Spalte bleibt leer. Dein Beispiel gibt mir die Datensätze aus, allerding mehrfach und ordnet den Zeilen, in denen keine "GroupID" vorhanden ist trotzdem einen "GroupName" zu. Wie muss ich das mit JOIN angehen?

Angel4585 27. Aug 2008 11:30

Re: PostgreSQL - Abfrage aus 2 Tabellen
 
versuchs mal mit nem Left outer join ;)

quatsch.. äh en inner join wars glaub ich

NetSonic 27. Aug 2008 11:40

Re: PostgreSQL - Abfrage aus 2 Tabellen
 
Mein Ansatz sieht jetzt so aus, allerdings bekomme ich so keine Datensätze zurück... *grübel*

SQL-Code:
SELECT      
tbladress.*,
tbladress_groups.*
FROM tbladress
INNER JOIN tbladress_groups ON tbladress."GroupID" = tbladress_groups."GroupID";

mirage228 27. Aug 2008 11:42

Re: PostgreSQL - Abfrage aus 2 Tabellen
 
Nimm mal LEFT OUTER JOIN ;-)

NetSonic 27. Aug 2008 11:53

Re: PostgreSQL - Abfrage aus 2 Tabellen
 
Dann zeigt er mir zwar wieder alle Datensätze korrekt an, aber die Spalte "GroupName" bleibt leer, egal ob eine "GroupID" vorhanden ist oder nicht...

SQL-Code:
SELECT      
tbladress.*,
tbladress_groups.*
FROM tbladress
LEFT OUTER JOIN tbladress_groups ON tbladress."GroupID" = tbladress_groups."GroupID";
Muss ich hier noch was umbauen oder wo liegt mein Fehler?

Trigger2003 27. Aug 2008 13:05

Re: PostgreSQL - Abfrage aus 2 Tabellen
 
Zitat:

Zitat von NetSonic
Dann zeigt er mir zwar wieder alle Datensätze korrekt an, aber die Spalte "GroupName" bleibt leer, egal ob eine "GroupID" vorhanden ist oder nicht...

Muss ich hier noch was umbauen oder wo liegt mein Fehler?

Kann IMHO nur bedeuten, daß in Deiner tbladress.GroupID zum Abfragezeitpunkt kein einziger gültiger Bezug auf tbladress_groups enthalten ist. Vielleicht die Testdaten nochmal kurz checken :wink: . Daher vermutlich auch kein Resultat mit INNER JOIN, das nur Datensätze zurückliefert, die erfolgreich ge-JOINed werden konnten.

PS: Statt "LEFT OUTER JOIN" kann man normalerweise auch nur "LEFT JOIN" schreiben. Das "OUTER" versteht sich an dieser Stelle von selbst. Auch statt "INNER JOIN" tut's meist schlicht "JOIN". Man ist ja schreibfaul... :stupid:

DeddyH 27. Aug 2008 13:06

Re: PostgreSQL - Abfrage aus 2 Tabellen
 
Wozu eigentlich die Gänsefüßchen in der Abfrage?

NetSonic 27. Aug 2008 13:15

Re: PostgreSQL - Abfrage aus 2 Tabellen
 
Zitat:

Zitat von Trigger2003
Kann IMHO nur bedeuten, daß in Deiner tbladress.GroupID zum Abfragezeitpunkt kein einziger gültiger Bezug auf tbladress_groups enthalten ist. Vielleicht die Testdaten nochmal kurz checken :wink: . Daher vermutlich auch kein Resultat mit INNER JOIN, das nur Datensätze zurückliefert, die erfolgreich ge-JOINed werden konnten.

Die Testdaten sind in Ordnung. Bei einem normalen Select zeigt er mir ja auch die "GroupID" an. Daran kann es nicht liegen :gruebel:

Zitat:

Zitat von DeddyH
Wozu eigentlich die Gänsefüßchen in der Abfrage?

Postgre möchte das gerne so... ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 Uhr.
Seite 1 von 3  1 23      

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