Вам нужно нажать предложение po1.buyer_id = 4
до ON
левого соединения. В WHERE
он фильтрует все строки, в которых не было найдено соответствующей записи в post
, следовательно, вы не получаете всех домашних животных.
Чтобы проверить, выбрал ли пользователь ровно два питомца, вы можете использовать коррелированный подзапрос, чтобы получить количество избранных пользователя.
SELECT pe1.name,
coalesce(po1.favourite, 0)
FROM example.pet pe1
LEFT JOIN example.post po1
ON po1.pet_id = pe1.id
AND po1.buyer_id = 4
WHERE (SELECT count(*)
FROM example.post po2
WHERE po2.buyer_id = po1.buyer_id
AND po2.favourite = 1) = 2;
, Если Вы не использовали метод Запуска для запуска процесса, свойство StartInfo не отражает, что параметры раньше запускали процесс. Например, при использовании GetProcesses для получения массива процессов, работающих на компьютере, свойство StartInfo каждого Процесса не содержит исходное имя файла, или аргументы раньше запускали процесс. (источник: MSDN)
предложение WMI Stuart является хорошим:
string wmiQuery = string.Format("select CommandLine from Win32_Process where Name='{0}'", processName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection retObjectCollection = searcher.Get();
foreach (ManagementObject retObject in retObjectCollection)
Console.WriteLine("[{0}]", retObject["CommandLine"]);
Если бы Вы нацелены на Windows XP или позже и можно предоставить издержки WMI, возможность состояла бы в том, чтобы искать целевой процесс с помощью WMI класс WIN32_Process, который имеет свойство CommandLine.
Process.StartInfo
возвраты ProcessStartInfo возражает, что предположительно, но не обязательно имеет аргументы в свойстве Arguments.
Действительно ли оба проекта являются Вашими? Вы могли изменить источник для процесса, который Вы пытаетесь исследовать, чтобы заставить его дать Вам свои параметры командной строки, вместо того, чтобы пытаться считать их из где-нибудь за пределами того процесса?