我在挣扎,也许是最简单的问题。我的SQL知识几乎限制了我实现这一目标。我正在尝试构建一个应该显示JobTitle,Note和NoteType的SQL查询。这是事情,第一份工作没有任何注意,但我们应该在结果中看到它。永远不应该显示系统备注。预期结果应如下所示
结果:
--------------------------------------------
|ID |Title |Note |NoteType |
--------------------------------------------
|1 |FirstJob |NULL |NULL |
|2 |SecondJob |CustomNot1|1 |
|2 |SecondJob |CustomNot2|1 |
|3 |ThirdJob |NULL |NULL |
--------------------------------------------
My query (doesn't work, doesn't display third job)
SELECT J.ID, J.Title, N.Note, N.NoteType
FROM JOB J
LEFT OUTER JOIN NOTE N ON N.JobId = J.ID
WHERE N.NoteType IS NULL OR N.NoteType = 1
我的表格:
My JOB Table
----------------------
|ID |Title |
----------------------
|1 |FirstJob |
|2 |SecondJob |
|3 |ThirdJob |
----------------------
My NOTE Table
--------------------------------------------
|ID |JobId |Note |NoteType |
--------------------------------------------
|1 |2 |CustomNot1|1 |
|2 |2 |CustomNot2|1 |
|3 |2 |SystemNot1|2 |
|4 |2 |SystemNot3|2 |
|5 |3 |SystemNot1|2 |
--------------------------------------------
答案 0 :(得分:1)
这不可能同时存在(NoteType不能同时为NULL以及1):
WHERE N.NoteType IS NULL AND N.NoteType = 1
您可能希望使用OR
代替检查NoteType是NULL还是1。
WHERE N.NoteType IS NULL OR N.NoteType = 1
编辑:使用更正后的查询,您的第三个作业将无法检索,因为JOB_ID
匹配,但由于where条件,该行会被过滤掉。
尝试使用以下方法来获取具有空值的第三个作业。
SELECT J.ID, J.Title, N.Note, N.NoteType
FROM JOB J
LEFT OUTER JOIN
( SELECT JOBID NOTE, NOTETYPE FROM NOTE
WHERE N.NoteType IS NULL OR N.NoteType = 1) N
ON N.JobId = J.ID
答案 1 :(得分:1)
只需排除systemNotes并使用子选择:
select * from job j
left outer join (
select * from note where notetype!=2
) n
on j.id=n.jobid;
如果将连接表包含在哪里,那么左外连接可以用作内连接。