![]() |
Datenbank: Access • Version: 2003 • Zugriff über: ADO
"Bedingte" Abfrage über mehrere Tabellen
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? |
Re: "Bedingte" Abfrage über mehrere Tabellen
Wird vermutlich mit Joins + Union gehen
SQL-Code:
select ...
from maintab inner join tabellea on ... union select ... from maintab inner join tabelleb on ... |
Re: "Bedingte" Abfrage über mehrere Tabellen
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. |
Re: "Bedingte" Abfrage über mehrere Tabellen
Zitat:
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> |
Re: "Bedingte" Abfrage über mehrere Tabellen
Aaah verstehe jetzt....danke....werde es mal testen.
Besten Dank. |
Re: "Bedingte" Abfrage über mehrere Tabellen
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:
Die Felder sind nur beispielhaft und entsprechen nicht meinem Projekt.
MainTabelle TabelleAllgemein TabelleTyp1 TabelleTyp2 TabelleTyp3
ID ID ID ID ID Text Typ Größe Farbe Wert Anzahl Gewicht Leistung 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:
Wenn ich in meiner Abfrage nun als Typ eine der möglichen Typen eingebe erwarte ich folgende Ergebnisse.
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
Code:
Wie kann ich aus den oben befindlichen Tabellen, die darunter stehenden Ergebnisse erzeugen, bei Angabe des Typen in der Abfrage?
<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 Vielen Dank fürs Lesen und Helfen. |
Re: "Bedingte" Abfrage über mehrere Tabellen
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. |
Re: "Bedingte" Abfrage über mehrere Tabellen
Hi,
evtl. genügt schon ein einfacher left join?
SQL-Code:
Es werden immer alle Spalten angezeigt, wo keine Daten vorliegen, kommt NULL
select *
from maintable mt left join tabelletyp1 t1 on t1.id = mt.id left join tabelletyp2 t2 on t2.id = mt.id : (bei MSSQL jedenfalls). |
Re: "Bedingte" Abfrage über mehrere Tabellen
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. |
Re: "Bedingte" Abfrage über mehrere Tabellen
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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-2025 by Thomas Breitkreuz