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-Key: 285096

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

Printed on: April 25, 2024 at 08:04 o'clock

Member: SlainteMhath
SlainteMhath Oct 09, 2015 at 06:59:02 (UTC)
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
Member: Archimedes
Archimedes Oct 09, 2015 at 07:09:14 (UTC)
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
Member: SlainteMhath
SlainteMhath Oct 09, 2015 at 07:16:25 (UTC)
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
Member: Archimedes
Archimedes Oct 09, 2015 updated at 08:19:30 (UTC)
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
Member: Andy1987
Andy1987 Oct 09, 2015 at 08:04:24 (UTC)
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.
Member: SlainteMhath
SlainteMhath Oct 09, 2015 at 08:10:52 (UTC)
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
Member: Andy1987
Andy1987 Oct 09, 2015 at 09:13:56 (UTC)
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.
Member: Archimedes
Archimedes Oct 09, 2015 at 09:54:10 (UTC)
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....
Member: Andy1987
Andy1987 Oct 09, 2015 at 10:29:32 (UTC)
Goto Top
Es geht... Vielen Dank euch allen face-smile
Member: Andy1987
Andy1987 Oct 13, 2015 at 12:10:31 (UTC)
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.
Member: Archimedes
Archimedes Oct 13, 2015 at 12:42:45 (UTC)
Goto Top
Versuch mal ein != bzw. <> anstatt ein NOT LIKE.
Member: Archimedes
Archimedes Oct 13, 2015 updated at 12:54:38 (UTC)
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.