![]() |
Datenbank: MS Access • Version: kA • Zugriff über: ADO
Abfrage über mehrere Tabellen
Liste der Anhänge anzeigen (Anzahl: 1)
'loha Folks,
ich benötige etwas Hilfe. Im angehängten Bild sind die Beziehungen einiger Tabellen dargestellt. Die Abfrage soll folgende Felder liefern: Key.Code, Key.KeyID, Device_User.Access, Device_User.DeviceID Der einzige Parameter für die Abfrage ist eine DeviceID. In der Tabelle Device_User sowie Device_Key sind immer sämtliche Einträge aus der jeweils linken und rechten Tabelle vorhanden, in User_Key ist dies nicht der Fall. Die Abfrage wird benötigt um Schlüssel auf Geräte zu Programmieren. Wenn ein Schlüssel mit einer Person in Beziehung steht, sollen dessen Zutrittsrechte übernommen werden, ansonsten wird der Zutritt verwehrt. Leider sind meine bisherigen Versuche eine Abfrage zusammenzuschustern kläglich gescheitert. Ich hoffe deshalb auf etwas Beihilfe. Meine bisherige, von Access verunstaltete Abfrage sieht so aus und liefert nur das Gewünschte Ergebnis wenn einem User ein Key zugeordnet ist. Vielleicht kann man darauf aufbauen: [code=sql] SELECT [Key].[Code], [Key].[KeyID], [Device_User].[Access], [Device_User].[DeviceID] FROM ([User] INNER JOIN (([Key] INNER JOIN Device_Key ON [Key].[KeyID]=[Device_Key].[KeyID]) INNER JOIN User_Key ON [Key].[KeyID]=[User_Key].[KeyID] Or [User_Key].[KeyID] Is Null) ON [User].[UserID]=[User_Key].[UserID] Or [User_Key].[UserID] Is Null) INNER JOIN Device_User ON [User].[UserID]=[Device_User].[UserID] WHERE [Device_User].[DeviceID]=[:DeviceID] And [Key].[KeyID]=[Device_Key].[KeyID] And ([User].[UserID]=[User_Key].[UserID] Or [User_Key].[UserID] Is Null) GROUP BY [Key].
Code:
Ich bin mir langsam auch nicht mehr sicher ob sich das gewünschte Resultat mit nur einer Abfrage realisieren lässt -.-
, [Key].[KeyID], [Access], [Device_User].[DeviceID];
Grüsse hirnstroem |
Re: Abfrage über mehrere Tabellen
Hallo,
ich habe es nicht getestet, aber versuch es mal so:
SQL-Code:
SELECT A.Code, A.KeyID, D.Access, D.DeviceID
FROM Key A JOIN Device_Key B ON B.KeyID = A.KeyID JOIN Device C ON C.DeviceID = B.DeviceID JOIN Device_User D ON D.DeviceID = C.DeviceID JOIN User E ON E.UserID = D.UserID JOIN User_Key F ON F.UserID = E.UserID AND F.KeyID = A.KeyID WHERE D.DeviceID = :Param |
Re: Abfrage über mehrere Tabellen
Argh, wenn ich das in ein von Access akzeptiertes Format bringen würde, bestünde die Möglichkeit, dass das funktioniert. Aber momentan sehe ich mich ausser Stande dies zu vollbringen. Aiaiai.
Aber vielen Dank schon einmal. |
Re: Abfrage über mehrere Tabellen
Da kann ich Dir leider auch nicht helfen, von Access hab ich keine Kelle. :roll:
|
Re: Abfrage über mehrere Tabellen
Kein Problem. Ich bin ja auch nicht davon ausgegangen, dass mir jemand die fixfertige lösung präsentiert. Access ist Krieg! :evil:
|
Re: Abfrage über mehrere Tabellen
Ich habe mich nun voller Verzweiflung an Access "Profis" gewendet (
![]() |
Re: Abfrage über mehrere Tabellen
Dann bin ich aber gespannt, wie das dann aussieht. ;)
|
Re: Abfrage über mehrere Tabellen
Die Access "Profis" wollen nicht helfen -.-
Vorläufig habe ich zwei verschiedene Abfragen im Einsatz, die eine ruft sämtliche Schlüssel ohne Benutzer ab, die andere jene mit Benutzer. Die Daten werden dann letztenendes in zwei getrennten Schleifen abgearbeitet. Und wenn man das so macht, schafft man es auch Access-konforme Abfragen zu schreiben. Schlüssel ohne Benutzer:
SQL-Code:
Schlüssel mit Benutzer:
SELECT *
FROM Device_Key, [Key] WHERE Device_Key.KeyID = [Key].KeyID AND Device_Key.DeviceID = :DeviceID AND NOT EXISTS (SELECT * FROM User_Key WHERE User_Key.KeyID = [Key].KeyID);
SQL-Code:
SELECT
Key.KeyID, Key.Code, Device_User.Access, Device_Key.DeviceID, Device_User.DeviceID FROM ([User] INNER JOIN Device_User ON User.UserID = Device_User.UserID) INNER JOIN (([Key] INNER JOIN Device_Key ON Key.KeyID = Device_Key.KeyID) INNER JOIN User_Key ON Key.KeyID = User_Key.KeyID) ON User.UserID = User_Key.UserID WHERE Device_Key.DeviceID=:1DeviceID AND Device_User.DeviceID=:2DeviceID; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 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