В левом соединении не отображается не совпадающая запись - PullRequest
0 голосов
/ 03 июня 2019

У меня есть этот простой запрос MySQL с объединением

Select

sp.PTPK, sp.EmployeeNamePK, sp.Half, sp.TaskPK, sp.TaskAssignCompletionId, sp.SwitchDate, sp.SpendDays, /*switch_person Table*/

pro.Name as ProjectName, pro.TeamLead /*Project Table*/

From switch_person sp


LEFT JOIN projects pro
ON pro.PK = sp.PTPK

Where sp.SwitchDate = '2019-03-01'
AND sp.Half =1

Правильно работает с одной проблемой, что project несопоставленные записи не отображаются. Я имею в виду, что есть некоторые несоответствующие записи (имя проекта), которые я не получаю из таблицы проекта. Я знаю, что он должен отображаться при использовании left join.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Как насчет ...

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 = '2019-03-01'
   AND sp.Half = 1

...?

0 голосов
/ 03 июня 2019

Обновлено после вашего последнего комментария.

Если вы действительно хотите всегда отображать данные проекта, я думаю, что вам, вероятно, будет лучше обслужить левое соединение.Кроме того, если проблема связана с производительностью, я предлагаю вам:

  1. Добавить индекс к вашей таблице switch_person
  2. Создать хранимую процедуру (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);

обновленный полный код здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...