如何使用 "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 CaseFolder
。 primary key
是 CaseId
,但我需要 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 ;
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 CaseFolder
。 primary key
是 CaseId
,但我需要 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 ;