«a» - это псевдоним таблицы :
SELECT a.id, a.rev, a.content FROM `docs` a # HERE, on this line, the table is given an alias of a INNER JOIN ( SELECT id, MAX(rev) rev FROM `docs` GROUP BY id ) b ON a.id = b.id AND a.rev = b.rev;
Этот псевдоним объявляется сразу после имени таблицы в предложении from (как указано выше).
Псевдонимы используются для сокращения и / или уточнения запроса. Есть несколько мест, где можно объявить псевдоним, например
.#table alias
from tablex as x
#derived table (subquery) alias
select d.* from (select * from t where col1 = 'xyz') as d
#column alias
select col1 as xyz
from tablex as x
Обратите внимание, что «как», показанное выше, является необязательным в большинстве баз данных, Oracle не разрешает использовать «как» при объявлении псевдонимов таблицы или подзапроса.
SELF JOINS
Псевдонимы таблиц жизненно важны, когда вы присоединяете таблицу к себе
select
t1.id as t1_id
, t2.id as t2_id
from tablex as t1
inner join tablex as t2 on t1.fk = t2.id
Без этих псевдонимов t1 и t2 этот запрос просто не может работать.
РЕДАКТИРОВАТЬ
К сожалению, слишком часто мы видим псевдонимы, в которых псевдонимы определяются «в порядке» в запросе. В вашем примере первый - «а», а второй - «б» и т. Д.
1113 Это плохая практика. Гораздо более значимым способом использования псевдонимов является использование «первых букв» каждого слова в имени таблицы или присвоение некоторого значения подзапросу.
В этом примере я бы предложил «d» (для документов) и «mr» (для max (rev))
SELECT d.id, d.rev, d.content, mr.rev
FROM `docs` as d
INNER JOIN (
SELECT id, MAX(rev) rev
FROM `docs`
GROUP BY id
) as mr ON d.id = mr.id AND d.rev = mr.rev;
Я бы пошел с msbuild и mbunit для модульных тестов. Для FTP-части google for msbuild настраиваемые задачи с FTP, и вы должны готовить на газе.
We do the same thing with Zed Builds and Bugs Manager from Hericus Software.
We have to combine the .Net assemblies with C++ dll's and package the whole thing together into a Java installation (imagine that confusion :-) ). We also use FTP to upload some components of the build (not the whole thing) to other systems that need pieces of what the build produces.
After everything has all been rolled together, the nice thing about the Zed server is that it becomes our system where everyone knows where to get their artifacts from. It handles promotion from Dev to QA to Production, and tracks the builds through this lifecycle.
Я исторически использовал CruiseControl , который работал просто отлично, но я также слышал хорошие вещи о TeamCity . Что касается задач FTP для MSBuild (что, безусловно, вам и нужно), то в сети есть кое-что для поиска. Когда я проверял в прошлый раз (что было не совсем недавно) все, что я обнаружил, имело тот или иной недостаток, так что я в итоге написал его сам (оборачивая FtpWebRequest в .NET). Хотя это может быть не самой лучшей реализацией FTP, задача предоставила мне необходимую функциональность (загрузка структур каталогов, удаленное удаление). Я полагаю, что сегодня могут быть доступны задачи, обеспечивающие эту функциональность (в противном случае, возможно, мне следует просто опубликовать мою ...)