Subselect / not in – Abfragen

Eine Abfrage zu erstellen, welches System eine bestimmte Software installiert hat, ist einfach.
Wenn man aber eine Collection haben will, die nur die Rechner enthält, welche eine  Software nicht hat, so wird’s etwas komplizierter. Folgendes Beispiel dient zur Verdeutlichung.

Am besten startet man mit einer Liste der Rechner, die die Software installiert haben, so z.B. „zeige mir alle Rechner, die Winzip 9.0 installiert haben„:

select distinct SMS_R_System.Name from SMS_R_System inner join SMS_G_System_ADD_REMOVE_PROGRAMS on SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID = SMS_R_System.ResourceId where SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName like „%Winzip 9.0%

Um sich jetzt die Rechner anzeigen zu lassen, die Winzip 9.0 nicht installiert haben muss man das „subselect … not in“ – Statement verwenden.

Zeige mir alle Rechner, aber nicht die, die Winzip 9.0 installiert haben„, was nichts anderes bedeutet als „alle Rechner ohne Winzip 9.0„:

select distinct Name from SMS_R_System where Name not in (select distinct SMS_R_System.Name from  SMS_R_System inner join SMS_G_System_ADD_REMOVE_PROGRAMS on SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID = SMS_R_System.ResourceId where SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName like „%Winzip 9.0%“)

In der GUI erkennt man auch sehr gut, dass der „Subselect“ – Teil genau die erste Query (blau markiert) meines Beispieles ist, der nur der „not in“ – Teil vorangestellt ist:

subselect_notin

3 Gedanken zu „Subselect / not in – Abfragen

  1. Alex Emmerich

    Vielen Dank für diesen Beitrag! Er hat auch mir sehr geholfen 🙂

  2. Pingback: SCCM 2007 - Clients (neu) Aufsetzen - MCSEboard.de MCSE Forum

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.