我有以下select语句,我需要从表tbTasks中对每个任务求和,并通过表tbProjects中的projectId对它们进行分组,以获得如下记录:
ProjectID = 1, ProjectName = 'My Project', TotalTime = 300 //<--sum of each task time
Run Code Online (Sandbox Code Playgroud)
查询如下所示:
SELECT tbTasks.projectId,
SUM(tbTasks.taskTime) AS totalTime,
tbProjects.projectName
FROM tbTasks
INNER JOIN tbProjects ON tbTasks.projectId = tbProjects.projectId
GROUP BY tbTasks.projectId
ORDER BY tbProjects.created DESC
Run Code Online (Sandbox Code Playgroud)
这工作并执行正常,但有一个问题,如果一个项目没有与之关联的任务,那么我根本没有得到任何记录(我想获得projectId,projectName和0或NULL的totalTime).所以,为了正确加入表格,tbProjects SQLite3迫使我以圆形方式进行.
SELECT tbTasks.projectId,
SUM(tbTasks.taskTime) AS totalTime,
tbProjects.projectName
FROM tbTasks LEFT OUTER JOIN tbProjects
ON tbTasks.projectId = tbProjects.projectId
GROUP BY tbTasks.projectId
UNION
SELECT tbProjects.projectId,
SUM(tbTasks.taskTime) AS totalTime,
tbProjects.projectName
FROM tbProjects LEFT OUTER JOIN tbTasks
ON tbProjects.projectId = tbTasks.projectId
GROUP BY tbTasks.projectId …Run Code Online (Sandbox Code Playgroud) 我需要基于一个公共主键加入4个表.如果sqlite实现了完全外连接,它可能看起来像这样(没有考虑优化).
SELECT S.pair, C.ball, P.bluejeans, B.checkered
FROM Socks S
FULL OUTER JOIN Caps C
FULL OUTER JOIN Pants P
FULL OUTER JOIN Boxers B
WHERE S.color = C.color AND S.color = P.color AND S.color = B.color;
Run Code Online (Sandbox Code Playgroud)
我看起来很长很难,我找到的最好的是这个2表sqlite完全连接实现了左连接和联合alls:
SELECT employee.*, department.*
FROM employee LEFT JOIN department
ON employee.DepartmentID = department.DepartmentID
UNION ALL SELECT employee.*, department.*
FROM department LEFT JOIN employee
ON employee.DepartmentID = department.DepartmentID
WHERE employee.DepartmentID IS NULL;
Run Code Online (Sandbox Code Playgroud)
我正在尝试修改它以适用于超过2个表,但我是SQL新手,我不会太过分.是否有可能在合理的时间内得到这个结果?
我认为我有一个正确的3个表的实现(它可能不正确)但我似乎仍然无法得到它4.这是我有3个:
SELECT S.pair, C.ball, P.bluejeans
FROM Socks S LEFT JOIN Caps C …Run Code Online (Sandbox Code Playgroud) 我试图使用此查询右键加入两个表
SELECT Persons.firstname, company.lastname
FROM Persons
RIGHT JOIN company ON Persons.firstname=company.firstname;
Run Code Online (Sandbox Code Playgroud)
出现此错误 -
目前不支持RIGHT和FULL OUTER JOIN
我们怎样摆脱这个?
注意:我使用的是Mozilla DB管理器.
我一直在尝试完全理解 sql 连接的概念,维恩图在这方面帮助了我很多。我发现它们适用于所有类型的连接,但不适用于自然连接。
自然连接的维恩图是什么样子的?