andy1987
Goto Top

SQL - Abfragen - Mehrere Tabellen - Problem WHERE-Filter

Guten Morgen,

ich muss mich derzeit mit SQL-Abfragen rumschlagen, um unsere Inventarisierung etwas Übersichtlicher zu gestallten.

Mein Problem ist jetzt folgendes. Ich habe vier Tabellen in denen meine benötigten Infos stehen.
Mein Ziel ist die Ausgabe wie folgt zu Programmieren:
Rechnername, IP-Adresse, OS, OS Lizenz, Office, Office Lizenz.

Wenn auf einem Rechner ein Office installiert ist, funktioniert es auch so wie ich es möchte. Jedoch nicht wenn kein Office installiert. Da ich mit dem Befehl "WHERE" arbeite, liegt hier mein Fehler, aber ich weißt auch nicht wie ich es anders bauen könnte. Bin leider etwas raus aus dem ganzen Abfrage Thema.


Hier mein Code bisher,

SELECT T1.HostID ,T1.Hostname, T1.IpOnline,
T2.DocuID, T2.HostID,
T3.DocuID, T3.OS, T3.OSArchitecture, t3.LicenseKey,
T4.DocuID, T4.SoftwareLicenseKey, T4.SoftwareName

FROM Clients T1, Documentation T2, DocumentationDetails T3, SoftwareT4

WHERE T1.HostID = T2.HostID
AND t2.DocuID = T3.DocuID
AND t4.DocuID = T2.DocuID
AND t4.SoftwareName LIKE 'Microsoft O%'

Order By HostName

Ich gehe davon aus, dass ich die vierte Zeile in der "WHERE"-Abfrage ändern muss. Könnt ihr mir hier weiterhelfen?

Vielen Dank.

Content-ID: 285096

Url: https://administrator.de/contentid/285096

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

SlainteMhath
SlainteMhath 09.10.2015 um 08:59:02 Uhr
Goto Top
Moin,

den Tail mit der Officeinstallation hab ich jetzt nicht verstanden. Was verwendest du denn als DB Backend? MSSQL? Access?

Und was genau bedeutet "funkltioniert nicht"? Fehlermeldung?

Versuchs mal so:
SELECT T1.HostID ,T1.Hostname, T1.IpOnline,
T2.DocuID, T2.HostID, 
T3.DocuID, T3.OS, T3.OSArchitecture, t3.LicenseKey,
T4.DocuID, T4.SoftwareLicenseKey, T4.SoftwareName 

FROM Clients T1

JOIN Documentation T2 on T1.HostID = T2.HostID, 
  DocumentationDetails T3 on t2.DocuID = T3.DocuID, 
  SoftwareT4 on t4.DocuID = T2.DocuID

WHERE t4.SoftwareName LIKE 'Microsoft O%'  

lg,
Slainte
Archimedes
Archimedes 09.10.2015 um 09:09:14 Uhr
Goto Top
Ich vermute das bei Andys Abfrage die PCs ohne Office Installation nicht auftauchen, da sie keinen Eintrag t4 (bezüglich Office) haben.

Bie MSSQL: Nimm die Afrage von SlainteMhath aber verbinde die Tabellen mit einem LEFT OUTER JOIN
SlainteMhath
SlainteMhath 09.10.2015 um 09:16:25 Uhr
Goto Top
die PCs ohne Office Installation nicht auftauchen da sie keinen Eintrag t4 (bezüglich Office) haben.
Ich ging davon aus, das genau das der Sinn des Queries ist face-smile
Archimedes
Archimedes 09.10.2015 aktualisiert um 10:19:30 Uhr
Goto Top
Ich verstehe es so, dass Andy auch gerne die PCs ohne Office in der Liste hätte, nur halt mit leeren Einträgen in den t4-Spalten.

Naja nun haben wir beide Fälle! face-smile
Andy1987
Andy1987 09.10.2015 um 10:04:24 Uhr
Goto Top
Erstmal vielen Dank für die schnelle Hilfe.

Bei dem Zweiten "ON" meldet er mir jetzt einen Fehler "Falsche Syntax in der Nähe des on-Schlüsselworts".

Ich sehe nur den Fehler nicht.

Zu euren Fragen:

Es handelt sich um eine MSSQL Datenbank. Ich sehe hier derzeit SQLServer 2008 R2 Express ein.

Und eure Vermutung stimmt mit der Ausgabe.
SlainteMhath
SlainteMhath 09.10.2015 um 10:10:52 Uhr
Goto Top
Falsche Syntax in der Nähe des on-Schlüsselworts".
Mach für jede Relation einen eigenen [LEFT OUTER] JOIN in einer eigenen Zeile und lass dafür die Kommas weg, dann sollte das passen
Andy1987
Andy1987 09.10.2015 um 11:13:56 Uhr
Goto Top
So komme ich jetzt wieder auf ein Ergebnis... Erstmal danke dafür.

Allerdings werden mir wieder nur die Clients anzeigt, welche eine Software installiert haben die mit "Microsoft Office" anfängt.

Habe es sowohl mit JOIN und Left Outer Join versucht.

Was mich wundert ist das die Ausgabe bei beiden Varianten identisch ist.
Archimedes
Archimedes 09.10.2015 um 11:54:10 Uhr
Goto Top
Ahhhh logisch ... denkfehler!
Versuchs mal mit folgendem FROM

...
FROM	Clients T1
		LEFT OUTER JOIN Documentation T2 on T1.HostID = T2.HostID
		LEFT OUTER JOIN DocumentationDetails T3 on t2.DocuID = T3.DocuID 
		LEFT OUTER JOIN (SELECT * FROM Software WHERE WHERE SoftwareName LIKE 'Microsoft O%') T4 ON t4.DocuID = T2.DocuID  
...
 


... dann natürlich kein separates WHERE mehr....
Andy1987
Andy1987 09.10.2015 um 12:29:32 Uhr
Goto Top
Es geht... Vielen Dank euch allen face-smile
Andy1987
Andy1987 13.10.2015 um 14:10:31 Uhr
Goto Top
Ich muss das Thema doch noch mal aufgreifen...

Ich bekomme nun zwar alle Office Installationen und auch eine "Null" ausgegeben, wenn auf dem Client kein Office installiert ist, aber es werden jedoch auch noch andere ähnliche Softwaretitel wie 'Microsoft Office File Validation Add-In' angezeigt.

Wenn ich diese jetzt "falschen" Softwaretitel jetzt ausfiltern möchte, werden mir auch die "nullen" mit ausgefiltert.

Wollte es so filtern:

WHERE T2.Archiv = 0
AND T1.HostTypeID = 1
And T4.SoftwareName NOT LIKE 'Microsoft Office File Validation Add-In'

irgendwie versteh ich das nicht *nervig*

wäre schön wenn ihr mir nochmal kurz helfen könntet.
Archimedes
Archimedes 13.10.2015 um 14:42:45 Uhr
Goto Top
Versuch mal ein != bzw. <> anstatt ein NOT LIKE.
Archimedes
Archimedes 13.10.2015 aktualisiert um 14:54:38 Uhr
Goto Top
bzw. auch das wird wohl zu keinem Ergebnis führen...

mach:

 ...
And (T4.SoftwareName NOT LIKE 'Microsoft Office File Validation Add-In' OR T4.SoftwareName IS NULL)  
...


noch geschickter wäre es vielleicht nur die gewünschten Office Bezeichnungen in eine
 WHERE SoftwareName IN ('Microsoft Office 2003', 'Microsoft Office 2007',.....)   
zu packen und diese dann auch direkt in die Unterabfrage zu integrieren anstatt in die globale WHERE-Klausel... aber das ist Feinform.