AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi INNER JOIN und LEFT JOIN verschachteln
Thema durchsuchen
Ansicht
Themen-Optionen

INNER JOIN und LEFT JOIN verschachteln

Ein Thema von hirnstroem · begonnen am 28. Nov 2006 · letzter Beitrag vom 29. Nov 2006
Antwort Antwort
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

INNER JOIN und LEFT JOIN verschachteln

  Alt 28. Nov 2006, 10:53
Datenbank: Access • Zugriff über: ADO
'loha Folks,

ich möchte gerne die untenstehende SQL-Abfrage mit einem INNER JOIN ergänzen, bin aber nich im Stande dies zu tun -.-

Momentan sieht die Abfrage so aus:

SQL-Code:
SELECT *
FROM
(Room INNER JOIN
  (Floor INNER JOIN
    (DeviceType INNER JOIN
      (Building INNER JOIN
        (Application INNER JOIN Device ON [Application].[ApplicationID] =[Device].[ApplicationID])
      ON [Building].[BuildingID] =[Device].[BuildingID])
    ON [DeviceType].[DeviceTypeID] =[Device].[DeviceTypeID])
  ON [Floor].[FloorID] =[Device].[FloorID])
ON [Room].[RoomID] =[Device].[RoomID])
WHERE
DeviceType.DeviceType LIKE :DeviceType
AND
Application.Application LIKE :Application
AND
Building.Building LIKE :Building
AND
Floor.Floor LIKE :Floor
AND
Room.Room LIKE :Room
AND
Active = True
ORDER BY Address;
Dieser sollte nun folgender LEFT JOIN Ausdruck hinzugefügt werden:

(Device_Key LEFT JOIN Device ON [Device_Key].[DeviceID] =[Device].[DeviceID]) Access wollte all meine bisherigen Versuche nicht akzeptieren.

Grüsse
hirnstroem
inde deus abest
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#2

Re: INNER JOIN und LEFT JOIN verschachteln

  Alt 28. Nov 2006, 14:33
Oder anderst gefragt, weshalb funktioniert folgendes Konstrukt nicht?

SQL-Code:
SELECT *
FROM
(Device_Key LEFT JOIN
  (Room INNER JOIN
    (Floor INNER JOIN
      (DeviceType INNER JOIN
        (Building INNER JOIN
          (Application INNER JOIN
            Device
          ON [Application].[ApplicationID] =[Device].[ApplicationID])
        ON [Building].[BuildingID] =[Device].[BuildingID])
      ON [DeviceType].[DeviceTypeID] =[Device].[DeviceTypeID])
    ON [Floor].[FloorID] =[Device].[FloorID])
  ON [Room].[RoomID] =[Device].[RoomID])
ON [Device_Key].[DeviceID] = [Device].[DeviceID])
WHERE
DeviceType.DeviceType LIKE :DeviceType
AND
Application.Application LIKE :Application
AND
Building.Building LIKE :Building
AND
Floor.Floor LIKE :Floor
AND
Room.Room LIKE :Room
AND
Active = True
ORDER BY Address;
inde deus abest
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#3

Re: INNER JOIN und LEFT JOIN verschachteln

  Alt 28. Nov 2006, 14:39
Weil es folgendermassen sein muss!

SQL-Code:
SELECT *
FROM
(Device_Key RIGHT JOIN
  (Room INNER JOIN
    (Floor INNER JOIN
      (DeviceType INNER JOIN
        (Building INNER JOIN
          (Application INNER JOIN
            Device
          ON [Application].[ApplicationID] =[Device].[ApplicationID])
        ON [Building].[BuildingID] =[Device].[BuildingID])
      ON [DeviceType].[DeviceTypeID] =[Device].[DeviceTypeID])
    ON [Floor].[FloorID] =[Device].[FloorID])
  ON [Room].[RoomID] =[Device].[RoomID])
ON [Device_Key].[DeviceID] = [Device].[DeviceID])
WHERE
DeviceType.DeviceType LIKE :DeviceType
AND
Application.Application LIKE :Application
AND
Building.Building LIKE :Building
AND
Floor.Floor LIKE :Floor
AND
Room.Room LIKE :Room
AND
Active = True
ORDER BY Address;
inde deus abest
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#4

Re: INNER JOIN und LEFT JOIN verschachteln

  Alt 29. Nov 2006, 10:24
Nun gibt es doch noch ein Problem.

Bei der oben zu sehenden Abfrage sind die Tabellen Device, Device_Key und Key (und noch andere, aber die sind nicht wichtig) involviert.

Nun ist es so, dass z.B. ein Gerät in der Tabelle Device erfasst wird. In der Tabelle Key stehen bereits 1000 Schlüssel bereit. Das Gerät kennt diese 1000 Schlüssel bereits, doch weiss es noch nicht ob diese gesperrt sind oder nicht. Diese Information wird über die Zwischentabelle Device_Key bereitgestellt.

Mein Problem ist nun, dass in diese Device_Key Tabelle die DeviceID aus der Tabelle Device sowie die KeyID aus der Tabelle Key und zusätzlich noch die Information ob der Schlüssel auf dem Gerät gesperrt ist oder nicht abzuspeichern. Sprich es funtzt gar nicht.

Lösungsideen habe ich einige. Zufriedenstellend ist aber keine.

1. Variante: Jedes mal wenn ein Gerät oder ein Schlüssel in der Datenbank erfasst wird, in der Tabelle Device_Key alles neue einfügen.


2. Variante: Feld für Sperre entfernen. Ist in der Tabelle Device_Key eine Beziehung vorhanden so zeigt diese die Sperre an, ist keine beziehung vorhanden geht man davon aus dass auch nichts gesperrt ist.

Beide Varianten sind weniger toll.

Was feststeht ist folgendes:

Wenn ich die Abfrage in Access laufen lasse, kann ich die fehlenden Angaben (KeyID, Gesperrt, die DeviceID passt automatisch) angeben und sie werden schön in der Device_Key Tabelle nachgeführt.

Jetzt müsste ich irgendwie wissen, was da in Access genau passiert wenn ich nach dem ausführen der Abfrage Felder ausfülle, welche vorher gar nicht existiert haben.
inde deus abest
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:28 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