Обновлено после вашего последнего комментария.
Если вы действительно хотите всегда отображать данные проекта, я думаю, что вам, вероятно, будет лучше обслужить левое соединение.Кроме того, если проблема связана с производительностью, я предлагаю вам:
- Добавить индекс к вашей таблице switch_person
- Создать хранимую процедуру (SP) для вашего запроса
Примерно так:
CREATE INDEX mydataindex ON switch_person(PTPK, SwitchDate, Half);
CREATE
PROCEDURE getmydata (IN filterdate date, IN half INT)
SELECT sp.PTPK
, sp.EmployeeNamePK
, sp.Half
, sp.TaskPK
, sp.TaskAssignCompletionId
, sp.SwitchDate
, sp.SpendDays
, pro.Name ProjectName
, pro.TeamLead
FROM projects pro
LEFT
JOIN switch_person sp
ON pro.PK = sp.PTPK
AND sp.SwitchDate = filterdate
AND sp.Half = half
ORDER BY
pro.Name;
Затем все, что вам нужно сделать, это вызвать SP следующим образом:
CALL getmydata ('2019-03-01', 1);
обновленный полный код здесь