Подумайте: group by
и having
. Что еще более важно, подумайте JOIN
, JOIN
, JOIN
. Никогда не используйте запятые в предложении from
.
SELECT p.firstName, p.lastName
FROM Professor p JOIN
Group g
ON g.professorCode = p.professorCode
WHERE (g.sessionCode, g.sigle) IN ( (32003, 'INF1130'), (32003, 'INF1110'),
(12004, 'INF3180'), (12004, 'INF2110')
)
GROUP BY p.firstName, p.lastName
HAVING COUNT(DISTINCT g.sigl) = 4; -- has all four
Не существует такого гладкого решения, как Sparkle (о котором я знаю).
Если вам нужны простые средства для развертывания и обновления приложений, ClickOnce является опцией. К сожалению, он негибкий (например, нет установки на компьютере вместо пользователя), непрозрачен (у вас очень мало влияния, ясности и контроля над тем, как на самом деле работает его развертывание) и нестандартен (пути, в которых хранится установленное приложение). в отличие от всего остального в Windows).
Гораздо ближе к тому, что вы просите, будет ClickThrough , побочный проект WiX , но я не уверен, что он все еще находится в разработке (если это так, они должны Проясните это ...) - и в любом случае он будет использовать MSI, а не NSIS.
Скорее всего, вам лучше откатывать что-то самостоятельно. Мне бы очень хотелось увидеть Sparkle-подобный проект для Windows, но, похоже, никто пока не сделал этого.
Я задал подобный вопрос. Перейдите по ссылке для наблюдения ответов. Сам Обновление
Автоматическое обновление Google Chrome основано на Омахе:
http://code.google.com/p/omaha/
Их обзор имеет большой раздел о том, почему это было необходимо:
Браузер обычно предлагал пользователю длинную серию увлекательных, запутанных и пугающих диалогов, пытаясь убедить пользователя не устанавливать. Затем пользователю был предложен мастер, заполненный вариантами выбора, которые ему не нужны или не знают, как выбирать среди них. Эти факторы в совокупности создают плохой пользовательский опыт и значительный спад в процессе установки приложения
Для .NET некоторое время назад Microsoft Patterns + Practices опубликовала Блок обновления приложений . Это было (по моему мнению) довольно раздутым и чрезмерно спроектированным, но сделало работу довольно хорошо.
По сути, он использовал «загрузчик-заглушку» для проверки манифеста и веб-службы, чтобы увидеть, была ли доступна более поздняя версия программы, чем установленная, а затем использовал технологию фонового загрузчика BITS для загрузки новой версии, если она была установлена. был доступен на сервере.
Как только новая версия была загружена и установлена (с .NET это так же просто, как xcopy в соответствующую папку), приложение обновит манифест. При следующей загрузке программы будет запущена новая версия.
В то время как код Patterns + Practices специфичен для .NET, там нет ничего, что нельзя было бы скопировать для приложений, отличных от .NET, особенно если у вас есть возможность запустить процесс установки в фоновом режиме.
Если ваше приложение написано в .Net, вы можете попробовать ClickOnce . Однако при установке с использованием этого подхода сложно выполнять административные или пользовательские действия.
wyUpdate выглядит действительно красиво. Смотрите видео здесь: http://wyday.com/wybuild/help/automatic-updates/
Только что пришел сюда из ответа на мой собственный вопрос по той же теме - я упоминаю еще одно обновление решения в моем вопросе . Он использует загрузчик заглушки и XML-файл для указания на последний исполняемый файл.
Теперь есть порт Sparkle для Windows, см. http://winsparkle.org .
Это хорошая идея использовать стороннее решение, потому что автообновления могут быть неприятны, особенно в Windows Vista/7 (UAC). Если на то пошло, моя компания использует продукт AutoUpdate+, и он работает достаточно хорошо.