AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi "Bedingte" Abfrage über mehrere Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

"Bedingte" Abfrage über mehrere Tabellen

Ein Thema von Tyrael Y. · begonnen am 21. Apr 2008 · letzter Beitrag vom 23. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#1

"Bedingte" Abfrage über mehrere Tabellen

  Alt 21. Apr 2008, 14:49
Datenbank: Access • Version: 2003 • Zugriff über: ADO
Hallo zusammen,

ich habe 5 Tabellen.

In TabelleA und TabelleB sind Informationen die für jeden Datensatz wichtig sind.
In TabelleB gibt es ein Feld Typ, was eine Zahl ist.

Je nachdem welcher Typ in TabelleB angegeben ist, bräuchte ich nun die zusätzlichen Daten
aus TabelleC, TabelleD oder TabelleE.

Muss ich jetzt drei verschiedene Abfragen machen oder ist es möglich dies über eine
Abfrage zu ermöglichen?
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: "Bedingte" Abfrage über mehrere Tabellen

  Alt 21. Apr 2008, 14:59
Wird vermutlich mit Joins + Union gehen

SQL-Code:
select ...
from maintab inner join tabellea on ...
union
select ...
from maintab inner join tabelleb on ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#3

Re: "Bedingte" Abfrage über mehrere Tabellen

  Alt 21. Apr 2008, 15:06
Union?

Das vereinigt doch einfach nur zwei Tabellen, so daß Einträge, die in beiden Tabellen vorkommen eliminiert werden, oder habe ich da was missverstanden?


Also nochmal...ich möchte bedingt vom Wert eines Feldes aus einer bestimmten Tabelle, Daten aus einer von mehreren Tabellen zu den Datensätzen "joinen", wenns geht natürlich.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: "Bedingte" Abfrage über mehrere Tabellen

  Alt 21. Apr 2008, 15:17
Zitat von Tyrael Y.:
Also nochmal...ich möchte bedingt vom Wert eines Feldes aus einer bestimmten Tabelle, Daten aus einer von mehreren Tabellen zu den Datensätzen "joinen", wenns geht natürlich.
keine verbietet dir in der Where-Bedigung oder im Join selbst dies Wert abzuchecken.

SQL-Code:
select ...
from maintab inner join tabellea on (maintab.id = tabellea.id)
where maintab.feldxyz = <bestimmterwert>
union
select ...
from maintab inner join tabellea on (maintab.id = tabelleb.id)
where maintab.feldxyz = <bestimmter_anderer_wert>
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#5

Re: "Bedingte" Abfrage über mehrere Tabellen

  Alt 21. Apr 2008, 15:22
Aaah verstehe jetzt....danke....werde es mal testen.

Besten Dank.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#6

Re: "Bedingte" Abfrage über mehrere Tabellen

  Alt 23. Apr 2008, 09:17
da ich parallel an mehreren Sachen arbeite, kam ich bisher nicht dazu den Vorschlag zu testen. Heute morgen habe ich testweise Tabellen angelegt und probiere direkt auf der Datenbank Abfragen aus, irgendwie komme ich leider nicht zu meinem gewünschtem Ergebnis.

Vielleicht kann mir einer bissel behilflich sein.

Ich habe beispielhaft folgende Tabellen

Code:
MainTabelle   TabelleAllgemein  TabelleTyp1   TabelleTyp2  TabelleTyp3
ID            ID                ID           ID          ID
Text          Typ               Größe        Farbe       Wert
               Anzahl            Gewicht      Leistung
Die Felder sind nur beispielhaft und entsprechen nicht meinem Projekt.
Ich möchte damit nur zeigen, daß die "Typ"-Tabellen unterschiedlich sind.

ID ist der Primärschlüssel und ist in allen Tabellen identisch.

In jedem Ergebnis erwarte ich die Daten aus MainTabelle, TabelleAllgemein und aus
einem der "Typ"-Tabellen, wobei das Ergebnis nur die Daten enthalten sollte, die dem Wert aus dem Feld Typ aus TabelleAllgemein entsprechen.

Beispiel, wenn ich folgende Daten habe...

Code:
MainTabelle:  TabelleAllgemein:  TabelleTyp1:       TabelleTyp2:         TabelleTyp3:
ID  Text     ID  Typ  Anzahl  ID Größe Gewicht  ID Farbe Leistung  ID Wert
23   Haus     23   1     2        23  45    1000      35  Grün  1          80  50 
35   Garten   35   2     1        56  20    100       78  Gelb  50000
56   Auto     56   1     5        83  11    3000
78   Sonne    78   2     1
80   Mensch   80   3     0
83   Gebäude  83   1     12
Wenn ich in meiner Abfrage nun als Typ eine der möglichen Typen eingebe erwarte ich folgende Ergebnisse.

Code:
<Bei Typ = 1>
ID = 23, Text = Haus  , Typ = 1, Anzahl = 2 , Größe = 45, Gewicht = 1000
ID = 56, Text = Auto  , Typ = 1, Anzahl = 5 , Größe = 20, Gewicht = 100
ID = 83, Text = Gebäude, Typ = 1, Anzahl = 12, Größe = 11, Gewicht = 3000

<Bei Typ = 2>
ID = 35, Text = Garten, Typ = 2, Farbe = Grün , Leistung = 1
ID = 78, Text = Sonne , Typ = 2, Farbe = Gelb , Leistung = 50000

<Bei Typ = 3>
ID = 80, Text = Mensch, Typ = 3, Wert = 50
Wie kann ich aus den oben befindlichen Tabellen, die darunter stehenden Ergebnisse erzeugen, bei Angabe des Typen in der Abfrage?

Vielen Dank fürs Lesen und Helfen.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: "Bedingte" Abfrage über mehrere Tabellen

  Alt 23. Apr 2008, 09:59
Wie willst Du drei unterschiedliche Tabellenstrukturen in einer(!) Tabelle darstellen?

Erstelle Dir also eine homogene Tabellenstruktur, die alle Datenaufnehmen kann und fülle dann die einzelnen Spalten, indem Du -wie Bernhard schon mittels UNION gezeigt hat- bei den einzelnen Untertabellen die ungültigen Spalten mit NULL auffüllst.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#8

Re: "Bedingte" Abfrage über mehrere Tabellen

  Alt 23. Apr 2008, 10:07
Hi,

evtl. genügt schon ein einfacher left join?
SQL-Code:
select *
from maintable mt
left join tabelletyp1 t1 on t1.id = mt.id
left join tabelletyp2 t2 on t2.id = mt.id
:
Es werden immer alle Spalten angezeigt, wo keine Daten vorliegen, kommt NULL
(bei MSSQL jedenfalls).
Gruß
Norman
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#9

Re: "Bedingte" Abfrage über mehrere Tabellen

  Alt 23. Apr 2008, 10:20
Das Problem bei UNION ist das die Struktur der einzelnen SELECT-Anweisungen identisch sein müssen.

Code:
...
LEFT JOIN TabelleTyp1 ON MainTabelle.ID = TabelleTyp1.ID AND TabelleAllgemein.Typ = 1
...
LEFT JOIN TabelleTyp2 ON MainTabelle.ID = TabelleTyp1.ID AND TabelleAllgemein.Typ = 2
..
LEFT JOIN TabelleTyp3 ON MainTabelle.ID = TabelleTyp1.ID AND TabelleAllgemein.Typ = 3

...also das oben funktioniert nicht, aber sowas ähnliches habe ich mir vorgestellt wäre vielleicht möglich, so daß man unter bestimmten Voraussetzungen eine Tabelle "joint" und andere nicht mit einbezieht.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: "Bedingte" Abfrage über mehrere Tabellen

  Alt 23. Apr 2008, 10:24
Zitat von Tyrael Y.:
Das Problem bei UNION ist das die Struktur der einzelnen SELECT-Anweisungen identisch sein müssen.
Zitat von alzaimar:
Wie willst Du drei unterschiedliche Tabellenstrukturen in einer(!) Tabelle darstellen?

Erstelle Dir also eine homogene Tabellenstruktur, die alle Datenaufnehmen kann und fülle dann die einzelnen Spalten, indem Du -wie Bernhard schon mittels UNION gezeigt hat- bei den einzelnen Untertabellen die ungültigen Spalten mit NULL auffüllst.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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