Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage über 3 Tabellen (https://www.delphipraxis.net/144111-sql-abfrage-ueber-3-tabellen.html)

Piro 30. Nov 2009 15:15

Datenbank: MS SQL Express • Version: 2005 • Zugriff über: ADO

SQL Abfrage über 3 Tabellen
 
Moin zusammen,

ich benötige Hilfe bei einer Abfrage über 3 Tabellen.

1. Tabelle: Sites
#id
site
sitennr

2. Tabelle: HSRP
#id
hsrp
site_id#

3. Tabelle: Subnets
#id
vlan
hsrp
site_id#


Die 1. Tabelle: Sites enthält folgende Daten:
id|site|sitenr
1 |Kiel| 140
2 |Ulm| 325

Die 2. Tabelle: HSRP enthält 8 Datensätze, die wie folgt aussehen:
id|hsrp|site_id
1 | 23 | 1
2 | 24 | 1
3 | 25 | 1
4 | 26 | 1
5 | 23 | 2
6 | 24 | 2
7 | 25 | 2
8 | 26 | 2

Die 3. Tabelle: Subnets enthält folgende Daten:
#id|vlan|hsrp|site_id#
1 |2101| 23 | 1
2 |3402| 24 | 2
3 |1200| 25 | 1


Die 2. Tabelle: HSRP muss komplett angezeigt und die jeweiligen Daten aus den anderen Tabellen hinzugefügt werden.
Die Tabelle: HSRP steht mit dem Fremdschlüssel site_id# der Tabelle: Sites in Verbindung.
Desweiter steht die Tabelle: HSRP mit dem Attribute hsrp der Tabelle: Subnets in Bezug.
Die Tabelle: Subnets steht mit dem Fremdschlüssel site_id# mit der Tabelle: Sites in Bezug.

Ergebnis
id|hsrp|site|sitenr|vlan
1 | 23 |Kiel|140|2101
2 | 24 |Kiel|140|NULL
3 | 25 |Kiel|140|1200
4 | 26 |Kiel|140|NULL
5 | 23 |Ulm|325|NULL
6 | 24 |Ulm|325|3402
7 | 25 |Ulm|325|NULL
8 | 26 |Ulm|325|NULL

Mit folgendem SQL Statement kann ich die Tabellen: HSRP und SITES abfragen:
SQL-Code:
SELECT network_hsrp.id,
       network_hsrp.hsrp,
       network_hsrp.site_id,
       network_sites.site,
       network_sites.sitenr
FROM  network_hsrp, network_sites
WHERE network_hsrp.site_id = network_sites.id
Mit folgendem SQL Statement kann ich die Tabellen: HSRP und Subnets abfragen:
SQL-Code:
SELECT network_hsrp.id,
       network_hsrp.hsrp,
       network_subnets.vlan,
       network_subnets.hsrp as subnethsrp
FROM  network_hsrp
       LEFT OUTER JOIN network_subnets
       ON network_hsrp.hsrp = network_subnets.hsrp
Es wäre schön, wenn einer von euch wüsste, wie man beide Abfragen kompiniert, dass das Ergebnis von oben herauskommt.

Danke im voraus.

Sven

Neutral General 30. Nov 2009 15:38

Re: SQL Abfrage über 3 Tabellen
 
Hi,

Vielleicht so:

EDIT: Verbessert:

SQL-Code:
SELECT
  hsrp.id,
  hsrp.hsrp,
  site.site,
  site.sitenr,
  subnets.vlan
FROM site
JOIN hsrp on (hsrp.site_id = site.id)
LEFT OUTER JOIN subnets on ((subnets.site_id = site.id) and (subnets.hsrp = hsrp.hsrp))
Habs aber nicht getestet. Funktioniert!

Piro 30. Nov 2009 16:00

Re: SQL Abfrage über 3 Tabellen
 
Vielen Dank.

Hat geklappt.

Schönen Abend noch.

sniper_w 30. Nov 2009 16:00

Re: SQL Abfrage über 3 Tabellen
 
@N. General:Stimmt. Oder sehr Änlich:
SQL-Code:
SELECT    
   HSRP.id
   , HSRP.hsrp
   , Sites.site
   , Sites.seitenr
   , Subnets.vlan
FROM HSRP
LEFT OUTER JOIN Sites
   ON HSRP.site_id = Sites.id
LEFT OUTER JOIN Subnets
   ON HSRP.hsrp = Subnets.hsrp AND Sites.id = Subnets.site_id


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