Hilfe bei SQL Abfrage

pipesox

Grünschnabel
Hallo zusammen,
ich versuche mich schon einige Zeit an einer SQL Abfrage, bekomme dieser aber leider nicht hin. Hoffe mir kann jemand helfen :)

Ich habe 3 folgende Tabellen:

AdminSW: Softwareverteilung durch Administrator
---------------------
Software
PCName
Standort


InstSW: Tatsächlich installierte Software (könnte auch ohne Admin installiert werden)
--------------------
Software
PCName
Standort


SWLiz: Lizenzverwaltung (Jeder PC sollte eine Lizenz gebucht haben)
--------------------
Software
PCName
Standort


Nun zu der Abfrage:
Ich will alle 3 Tabellen zusammenfassen, so dass mittels dieser Abfrage weiss, auf welchem PC welche Software (wie) installiert wurde und ob eine Lizenz vorhanden ist.

Im Idealfall wurde die Software vom Administrator installiert, ist also dann auch in der Tabelle "InstSW" für den PC vorhanden und des ist eine Lizenz in der "SWLizenz" verfügbar. Soweit kein Problem.

Jedoch könnte die Software auch einfach so von dem User installiert werden, deswegen taucht der Eintrag nicht in der Tabelle "AdminSW" auf und es ist keine Lizenz vorhanden.
Oder die Software wurde vom Administrator installiert aber ausversehen keine Lizenz hinzugefügt.

Hoffe es ist nicht zu verwirrend am späten Abend ;)

Vielen Dank und Gruss
pipesox
 
Dein Datenbank-Schema eignet sich nicht so sehr für eine solche Abfrage.

Wenn du dieses ändern kannst würde ich so etwas in der Art vorschlagen:
PC
PCName (Primary Key)
Standort

Software
Name (Primary Key)

Installiert
PCName (Primary Key)
Software (Primary Key)
Admin (boolean oder Name des Admin)
Lizenz (boolean oder Lizenznummer)

Besonders das Redundante halten von PCName und Standort ist nicht sinnvoll. Denn der Standort gehört fest zum Namen des PCs, daher sollte man dies auch in der Datenbank so organisieren.

Weiterhin reichen einfache boolsche Werte für Admin und Lizenz. Einfach einen Haken wenns vom Admin installiert wurde und einen Haken bei Lizenz wenn eine solche vorhanden ist. Die Tabelle Software kann man ggfs weglassen oder noch weitere Details zur Software darin unterbringen.

Die Abfrage vereinfacht sich dann sehr stark:
SQL:
SELECT *
FROM PC NATURAL JOIN Installiert;
 
Hallo Zeja, danke für deine Antwort.

Leider kann ich an dem DB-Schema nichts ändern, da diese Informationen aus 3 verschiedenen Systemen kommen :/

Hast du eine andere Idee?
 
Leider kann ich an dem DB-Schema nichts ändern, da diese Informationen aus 3 verschiedenen Systemen kommen :/

Selbst wenn es irgendwo herkommt kann man es ändern. Irgendjemand hat es sich ja auch im Ansatz ausgedacht...

Wie auch immer. Probier mal:
SQL:
SELECT 
  i.PCName,
  i.Standort,
  i.Software,
  a.Software IS NOT NULL AS Admin,
  l.Software IS NOT NULL AS Lizenz
FROM (instsw i LEFT JOIN
(SELECT Software, PCName, Standort FROM adminsw) a 
   ON i.PCName = a.PCName AND i.Software = a.Software) LEFT JOIN
(SELECT Software, PCName, Standort FROM swlizenz) l 
   ON i.PCName = l.PCName AND i.Software = l.Software;
 
Nuja sicherlich könnte man da irgendwas ändern, nur wenn ich da jetzt komm ich will was ändern, bekomm ichn A... aufgerissen ;) Also kann ich nichts ändern :)

Also die Abfrage hat funktioniert, vielen Dank
Einzigstes Prob des hab ich is nun, wenn ich nach Standort suche in nen Timeout reinlaufe... muss ich mal sehen wie ich dann die Abfragen auf, die ich aufgebaut habe optimiere :)

Danke nochmal!
Gruss pipesox
 
Zurück