我很感激社区可以提供的任何帮助,帮助我编写SQL查询来实现以下目标,或者,如果不可能,提供一种方法来实现。
目标:返回如下结果:
subtaskID | subtaskQueueID | subtaskName | timeComplete | jobID | approver
--------- | -------------- | ----------- | ------------------- | ------| --------
23 | 2 | Review #1 | 2017-08-14 00:00:00 | 840 | Bill
24 | 2 | Review #2 | 2017-08-14 01:00:00 | 840 | John
25 | 2 | Review #3 | NULL | 840 | NULL
26 | 2 | Review #4 | NULL | 840 | NULL
源表:
Job_subtasks_status
jobID | subtaskID | timeComplete | approver
----- | ------------ | ------------------- | --------
840 | 23 | 2017-08-14 00:00:00 | Bill
840 | 24 | 2017-08-14 01:00:00 | John
Job_subtasks
subtaskID | subtaskQueueID | subtaskName
--------- | -------------- | -----------
23 | 2 | Review #1
24 | 2 | Review #2
25 | 2 | Review #3
26 | 2 | Review #4
27 | 4 | Funding Approval
28 | 4 | Requirement Approval
需要注意的重要一点是,我希望在jobaskubueID = 2时返回Job_subtasks中的所有记录,如果Job_subtasks_status中没有记录则返回NULL(NULL表示子任务未完成)。
我认为标准LEFT JOIN会这样做,所以我尝试了以下查询:
SELECT A.subtaskID, A.subtaskQueueID, A.subtaskName, B.timeComplete, B.jobID, B.approver
FROM Job_subtasks A LEFT JOIN Job_subtasks_status B ON A.subtaskID=B.subtaskID
WHERE B.subtaskID=2 AND B.jobID=840
答案 0 :(得分:0)
您的WHERE
子句会过滤掉NULL
的{{1}}结果(LEFT JOIN
执行 WHERE
后)。
将这些条件添加到OUTER JOIN
子句:
ON
答案 1 :(得分:0)
left join
中 second 表的条件应该放在on
子句中:
SELECT js.subtaskID, js.subtaskQueueID, js.subtaskName,
jss.timeComplete, jss.jobID, jss.approver
FROM Job_subtasks js LEFT JOIN
Job_subtasks_status jss
ON js.subtaskID = jss.subtaskID AND jss.subtaskID = 2 AND jss.jobID = 840;
我还强烈建议您使用有意义的表别名。
为什么条件会去那里? left join
保留第一个表中的所有行以及第二个表中的匹配行。如果没有匹配项,则第二个表中的列为NULL
- WHERE
子句将其过滤掉。
答案 2 :(得分:0)
您可以尝试使用LEFT OUTER JOIN
。这将返回来自{Job_subtasks»表subtaskQueueID=2
Select A.subtaskID,
A.subtaskQueueID,
A.subtaskName,
B.timeComplete,
B.jobID,
B.approver
From Job_subtasks A
Left Outer Join Job_subtasks_status B On A.subtaskID = B.subtaskID
And B.subtaskID = 2
And B.jobID = 840
结果应为:
subtaskID | subtaskQueueID | subtaskName | timeComplete | jobID | approver
--------- | -------------- | ----------- | ------------------- | ------| --------
23 | 2 | Review #1 | 2017-08-14 00:00:00 | 840 | Bill
24 | 2 | Review #2 | 2017-08-14 01:00:00 | 840 | John
25 | 2 | Review #3 | NULL | 840 | NULL
26 | 2 | Review #4 | NULL | 840 | NULL