dg
Moderator-папарацци | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору FreemanRU Цитата:это как вообще? All итак, вот правильный вариант, который сработал у меня: Код: select SMS_R_System.ResourceID,SMS_R_System.ResourceType,SMS_R_System.Name,SMS_R_System.SMSUniqueIdentifier,SMS_R_System.ResourceDomainORWorkgroup,SMS_R_System.Client from SMS_R_System where ResourceId not in ( select SMS_G_System_SYSTEM.ResourceID from SMS_R_System inner join SMS_G_System_SoftwareFile on SMS_G_System_SoftwareFile.ResourceID = SMS_R_System.ResourceId inner join SMS_G_System_SYSTEM on SMS_G_System_SYSTEM.ResourceID = SMS_R_System.ResourceId where SMS_G_System_SoftwareFile.FilePath = "C:\\Program Files\\Symantec AntiVirus\\CLT-INST\\WIN32\\" ) | Добавлено: пояснение для тех, кто (как я) ничерта не понимает в сиквеле. 1. создаём запрос (query) на тему: «покажи нам всех серверов SAV». Как это сделать — я писал на предыдущей странице. 2. создаём коллекцию и редактируем правило включения (membership rule). 3. Recource Class — выбираем System, так как коллекция будет включать компы, а не пользователей или чего похлеще. 4. дальше редактируем запрос (Edit query statement). Вкладка General — это какие поля, собственно выбирать (то есть вторая строчка в коде выше). Это всё подставляется само, редактировать тут нечего. 5. вкладка Criteria — самое интересное. Как, собственно, выбирать клиентов. Жмём на звёздочку — это значит «создать новое». Выбираем Criterion Type — Subselective values. Это потому, что наш запрос будет производить сравнение ID клиентов с теми ID, которые нашёл запрос (который мы сделали в пункте 1). По умолчанию Criterion Type — Simple value, то есть сравнение идёт с жёстко заданным значением. 6. Where — жмём на Select и выбираем. Attribute Class — System. Alias — пропускаем. Attribute — Resource ID. Это мы выбрали, что, собственно, будет сравнивать с результатами того самого запроса из пункта 1. 7. Operator — выбираем Not In. Потому что нам в коллекцию надо выбрать всё, что не выбрано тем запросом. Ведь запрос вернул серверов SAV, а нам нужны все, кроме них. 8. Subselect — это с чем, собственно, будем сравнивать значения. Которые выбрали в пункте 6. То есть Resource ID клиентов. А сравнивать мы их будем с Resource ID серверов SAV, которые нам вернул запрос из пункта 1. То есть здесь мы жмём Brouse и выбираем это запрос. (На самом деле можно было бы обойтись и без создания запроса вовсе, а его текст написать сразу здесь в поле Subselect. Но тогда не удалось бы его построить билдером, а пришлось бы писать полностью самостоятельно). 9. Всё, жмём OK пять раз (не забыв дать имя всему, чему попросят) и наполняем коллекцию клиентами — то есть делаем All Tasks —> Update Collection Membership. У меня это сработало, то есть запрос вернул всех клиентов, кроме серверов SAV. Если у вас будут проблемы или вопросы — пишите в этом топике. Добавлено: ещё одно пояснение о том, почему не работают варианты, предложенные на предыдущей странице — в стиле select (...) where not (...) = (...) и в стиле select (...) where (...) != (...). Пишу это потому что уже после того, как я написал, что это не работает, мне продолжали советовать такие конструкции. вот представьте, что компы — это корзины с фруктами. На некоторых компах стоит сервер SAV, а в некоторых корзинах попадаются яблоки. Вот вам надо их исключить. И варианты выше говорят SMS-у: «Принеси корзины, к которых есть не яблоки». Вот он и приносит вообще все корзины, так как во всех корзинах есть какие-то другие фрукты, отличные от яблок. Точно так же, на всех компах стоит какой-то другой софт, не сервер SAV. И на этом основании все эти компы попадают в выборку. Поэтому нам надо сказать по-другому, а именно: «Принеси все корзины, кроме тех, где найдены яблоки». Именно это делает мой код. |