我有一个带有连接的简单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
时显示它。
答案 0 :(得分:0)
上次发表评论后更新。
如果确实要始终显示项目数据,我认为左连接可能会更好。除此之外,如果问题出在性能上,我建议您:
赞:
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);
更新了完整代码here
答案 1 :(得分:0)
怎么样...
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
...?