Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage aus mehreren Tabellen... (https://www.delphipraxis.net/30428-sql-abfrage-aus-mehreren-tabellen.html)

Michaela_ 24. Sep 2004 16:23


SQL Abfrage aus mehreren Tabellen...
 
Hallo,

ich hatte noch nie viel mit sql zu tun, aber nun bleibt mir nichts anderes übrig und da steh ich nun
gleich vor einem Problem.

Es sieht so aus:

Eine Tabelle beinhaltet eine Liste mit Artikel, zu jedem können drei Texte abgelegt werden.
Diese sind in drei anderen Tabellen enthalten.

[Artikel][Text1][Text2][Text3]
A 1 1 2
B 5 3 6
C 0 3 7

In der Artikeltabelle sind in den Spalten der Index zu dem Eintrag in den anderen Tabellen enthalten.

Mit Locate oder so wäre es kein Problem aber ich denk das müsste doch schöner zu lösen sein.
Jetzt frage ich mich ob es möglich ist mit nur einer SELECT Anweisung auch gleichzeitig an den Inhalt der
Felder aus den einzelnen Tabellen zu kommen.



Ich hoffe das war jetzt nicht zu kompliziert...



danke für eure hilfe,

Michaela

Hansa 24. Sep 2004 16:39

Re: SQL Abfrage aus mehreren Tabellen...
 
Übergebe an die Texte die ID des zugehörigen Artikels (z.B. als ID_ART).

Pro Artikel erhält man die Texte dann so :

Delphi-Quellcode:
TextDS.Close;
TextDS.ParamByName ('ID_ART') := ArtDS.FieldByName ('ID');
TextDS.SelectSQL := 'SELECT * FROM TEXTE WHERE ID_ART= :ID_ART';
TextDS.Open;

Michaela_ 24. Sep 2004 16:52

Re: SQL Abfrage aus mehreren Tabellen...
 
Hallo Hansa,

also ich weiss nicht genau was du meinst.

Ich habs zumindest mit einer zweiten Tabelle geschaft. Und zwar so:

Code:
Query.SQL.Text := 'SELECT Texte1.Info TXT1 
                   FROM Texte1 
                   INNER JOIN Artikel
                   ON Texte1.IDX = Artikel.TextID1
                   WHERE Artikel.Code = 'B'
Wie sieht das mit mehr als einer Tabelle aus. Ist INNER JOIN dann noch möglich?

lg,
michaela

shmia 24. Sep 2004 17:02

Re: SQL Abfrage aus mehreren Tabellen...
 
Zitat:

Zitat von Michaela_
Ich habs zumindest mit einer zweiten Tabelle geschaft. Und zwar so:

Code:
Query.SQL.Text := 'SELECT Texte1.Info TXT1 
                   FROM Texte1 
                   INNER JOIN Artikel
                   ON Texte1.IDX = Artikel.TextID1
                   WHERE Artikel.Code = 'B'
Wie sieht das mit mehr als einer Tabelle aus. Ist INNER JOIN dann noch möglich?

Du bist auf dem richtigem Weg. :mrgreen:
Aber du solltest LEFT OUTER JOINS verwenden, denn sonst kann es dir passieren, dass
Zeilen aus der Artikeltabellen verloren gehen !

SQL-Code:
SELECT Artikel.IDX, Texte1.Info TXT1, Text2.Info TXT2, Text3.Info TXT3 
                   FROM Artikel
LEFT OUTER JOIN Texte1 ON Artikel.TextID1=Texte1.IDX
LEFT OUTER JOIN Texte2 ON Artikel.TextID2=Texte2.IDX
LEFT OUTER JOIN Texte3 ON Artikel.TextID3=Texte3.IDX
WHERE Artikel.Code = 'B'
Es ist natürlich ungeschickt die Nachschlagetexte in 3 verschiedenen Tabellen mit gleicher Struktur unterzubringen.
Da wäre eine Tabelle mit einem zusätzlichen Feld schlauer gewesen:
Code:
Tabelle NTexte
======================
IDX     Int (NOT NULL)
TextTyp Int (NOT NULL)
Info    varchar(200)

Michaela_ 24. Sep 2004 17:21

Re: SQL Abfrage aus mehreren Tabellen...
 
hi shmia,

danke dir.

Wie würde die Abfrage denn aussehen wenn ich die Tabelle so ändere wie du vorgeschlagen hast?


lg,
michaela


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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