SELECT CaseFolder.CaseId, CaseFolder.CaseCoverImageFileName,
CaseFolder.CaseName, count(Event.CaseId), CaseFolder.CaseColor,
CaseFolder.IsMedicalCase, CaseFolder.StartDate, CaseFolder.EndDate
FROM CaseFolder
LEFT JOIN Event ON CaseFolder.CaseId = Event.CaseId
WHERE Event.PersonId = 1 AND Event.IsDeleted = 0 AND CaseFolder.IsDeleted = 0
GROUP BY CaseFolder.CaseId
我按表Event
选择Count
,并按表CaseFolder
选择另一个。主键
是 CaseId
,但是我需要选择一个表中包含但另一个表中不包含的数据,此时必须添加“where”和“LEFT ON”。如果我删除sql代码WHERE Event.PersonId = 1 AND Event.IsDeleted = 0 AND CaseFolder.IsDeleted = 0
结果是正确的。因为 WHERE
包含不适合表CaseFolder
的条件。我该怎么办?
最佳答案
左连接中第二个表的条件应位于 on
子句中:
SELECT CaseFolder.CaseId, CaseFolder.CaseCoverImageFileName,
CaseFolder.CaseName, count(Event.CaseId), CaseFolder.CaseColor,
CaseFolder.IsMedicalCase, CaseFolder.StartDate, CaseFolder.EndDate
FROM CaseFolder LEFT JOIN
Event
ON CaseFolder.CaseId = Event.CaseId AND
Event.PersonId = 1 AND Event.IsDeleted = 0
WHERE CaseFolder.IsDeleted = 0;
GROUP BY CaseFolder.CaseId ;
否则,LEFT JOIN
会变成 INNER JOIN
,因为条件失败并返回 NULL
值。请注意,使用表别名可以更轻松地编写和读取查询:
SELECT cf.CaseId, cf.CaseCoverImageFileName,
cf.CaseName, count(e.CaseId), cf.CaseColor,
cf.IsMedicalCase, cf.StartDate, cf.EndDate
FROM CaseFolder cf LEFT JOIN
Event e
ON cf.CaseId = e.CaseId AND
e.PersonId = 1 AND e.IsDeleted = 0
WHERE cf.IsDeleted = 0;
GROUP BY cf.CaseId ;
关于mysql - 如何使用 "LEFT ON"获取SQLite中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33181693/