相关疑难解决方法(0)

SQLite3使用LEFT JOIN和UNION模拟RIGHT OUTER JOIN

我有以下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)

sql sqlite union group-by full-outer-join

8
推荐指数
2
解决办法
1万
查看次数

完全外部加入4个表的sqlite

我需要基于一个公共主键加入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)

sqlite full-outer-join

5
推荐指数
1
解决办法
2768
查看次数

数据库错误 - 目前不支持RIGHT和FULL OUTER JOIN

我试图使用此查询右键加入两个表

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 sqlite join

4
推荐指数
2
解决办法
5882
查看次数

自然连接的维恩图

我一直在尝试完全理解 sql 连接的概念,维恩图在这方面帮助了我很多。我发现它们适用于所有类型的连接,但不适用于自然连接。

自然连接的维恩图是什么样子的?

sql database join natural-join venn-diagram

3
推荐指数
1
解决办法
1771
查看次数