![]() |
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? |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Ungetestet:
Code:
Überall wo ein Gruppenname zu der ID existiert, werden nun auch die Datensätze dazu selektiert.
SELECT
ta.*, tbg.GroupName FROM tbladress ta, tbladress_groups tbg WHERE ta.GroupID = tbg.GroupID Möchtest Du auch Datensätze ohne zugehörigen Eintrag in der Gruppen-Tabelle, musst Du einen expliziten JOIN benutzen :) |
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?
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
versuchs mal mit nem Left outer join ;)
quatsch.. äh en inner join wars glaub ich |
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"; |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Nimm mal LEFT OUTER JOIN ;-)
|
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:
Muss ich hier noch was umbauen oder wo liegt mein Fehler?
SELECT
tbladress.*, tbladress_groups.* FROM tbladress LEFT OUTER JOIN tbladress_groups ON tbladress."GroupID" = tbladress_groups."GroupID"; |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Zitat:
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: |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Wozu eigentlich die Gänsefüßchen in der Abfrage?
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Zitat:
Zitat:
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Zitat:
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Zitat:
tbladress -------------------------- AdressNo + GroupID + Name1 -------------------------- 1000 + 1 + TestA 1001 + 1 + TestB 1005 + 2 + TestC 1009 + 1 + TestD tbladress_groups ------------------- GroupID + GroupName ------------------- 1 + Autoren 2 + Admins Meiner Ansicht nach, sind also alle Werte vorhanden. Nur das Select-Statement hat einen Fehler... den ich nicht finde! :wall: |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Nur 'ne Idee:
Da GroupID in beiden Tabellen enthalten ist, würde ich's mal aus Gründen der Eindeutigkeit mit Alias versuchen, wie mirage das schon angeregt hat:
SQL-Code:
SELECT
ta.*, tag.GroupName FROM tbladress ta LEFT OUTER JOIN tbladress_groups tag ON tag."GroupID" = ta."GroupID" |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Mal von vorn:
SQL-Code:
[edit] :oops: Zu langsam [/edit]
SELECT A.AdressNo, A.Name1, G.Groupname
FROM tbladress A LEFT JOIN tbladress_groups G ON G.GroupdID = A.GroupID |
Re: PostgreSQL - Abfrage aus 2 Tabellen
SQL-Code:
Führt zu folgendem Ergebnis:
SELECT A."AdressNo", A."Name1", G."GroupName"
FROM tbladress A LEFT JOIN tbladress_groups G ON 'G."GroupID"' = A."GroupID" AdressNo + Name1 + GroupName ---------------------------- 1001 + TestA + 1002 + TestB + 1005 + TestC + 1009 + TestD + Das Feld "GroupName" ist LEER! :| |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Sicher, dass da Gänsefüßchen hinmüssen? In meinem Buch über PostgreSQL sind keine aufgeführt. Und die Join-Bedingung ist auch geklammert, aber ansonsten genauso wie hier dargestellt...
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Zitat:
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Ich habe keine Ahnung von PostgreSQL, aber in Firebird wird der Feldname bei der Verwendung von Gänsefüßchen case-sensitive ausgewertet. Vielleicht liegt hier der Fehler?
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Ooooooooops... Ich habe den Fehler gefunden! :pale:
Das Feld "GroupID" in der Tabelle "tbladress" war vom Typ "character" während in der Tabelle "tbladress_groups" das Feld "GroupID" vom Typ "integer" ist. Das kann ja auch nicht wirklich gehen. Manchmal ist man echt auf beiden Augen doof... :mrgreen: Zitat:
Danke für Eure Mühe und Geduld! :dp: |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Zitat:
![]() Here are a few examples of both valid and invalid names:
Double quotes um Feldnamen scheinen also erlaubt zu sein. |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Zitat:
Zitat:
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Zitat:
Danke! |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Jetzt stellt sich mir noch eine Frage:
Es ist gewünscht diese Datenmenge direkt editieren zu können. Wie stelle ich es an, da die TADOQuery ein JOIN Statement in einem Select leider blockiert und keine Modifikation zulässt, die Ergebnismenge bearbeiten zu können. Ein Select ohne JOIN Funktioniert ohne Probleme... |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Hallo,
damit du tblAddress bearbeiten kannst, schmeißt du den Join wieder weg und arbeitest mit einem LookupField. Grüße vom marabu |
Re: PostgreSQL - Abfrage aus 2 Tabellen
Ja gut, das würde gehen. Aber wie weiß ich denn, welcher Datensatz in der Grid (Ansicht der Datensätze aus dem SELECT/JOIN-Konstrukt) ausgewählt wurde, damit ich diesen direkt bearbeiten kann?!?! :gruebel:
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Der im Grid ausgewählte Datensatz wird zum aktuellen Datensatz des dem Grid unterliegenden DataSet ...
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Ähm, ich nutze derzeit kein DataSet. Das alles läuft über TADOConnection, TADODataSource und TADOQuery. Oder ist das ein Problem bzw. grob fahrlässig? :?:
|
Re: PostgreSQL - Abfrage aus 2 Tabellen
Wenn du eine datensensitive visuelle Komponente verwendest, dann benutzt du auch TDataSource - und dort musst du deinen DataSet angeben, was du ja bestimmt gemacht hast. TADOQuery ist eine von TDataSet abgeleitete Komponente, sonst könntest du deine Query dort gar nicht eintragen.
Eventuell möchtest du dir die Komponente TADODataSet anschauen, die moderner als TADOQuery ist. TADOQuery ist mehr für BDE Konvertiten. |
Re: PostgreSQL - Abfrage aus 2 Tabellen
OK, das werde ich dann mal in Angriff nehmen. Falls es dort Probleme gibt, werd ich mich wieder melden!
Danke für den Tipp! :thumb: Schönen Abend noch... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 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 by Thomas Breitkreuz