如何使用 "LEFT ON" 在 SQLite 中获取数据

How to get the data in SQLite with "LEFT 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
    WHERE Event.PersonId = 1 AND Event.IsDeleted = 0 AND CaseFolder.IsDeleted = 0
    GROUP BY CaseFolder.CaseId 

我 select Count tableEvent 另一个 table CaseFolderprimary keyCaseId,但我需要 select 包含在 table 中但不包含在另一个 table 中的数据,当必须添加 "where" 和 "LEFT ON" 时。如果我删除了 sql 代码 WHERE Event.PersonId = 1 AND Event.IsDeleted = 0 AND CaseFolder.IsDeleted = 0 结果是 right.Because WHERE 包含不适合 tableCaseFolder 的条件。我应该怎么办做什么?

left join 中第二个 table 的条件应该放在 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 值。请注意,使用 table 别名:

您的查询更易于编写和阅读
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 ;