0

我正在挣扎,也许是有史以来最简单的问题。我的 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         |
--------------------------------------------
4

2 回答 2

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
于 2012-11-12T15:28:23.067 回答
1

只需排除 systemNotes 并使用子选择:

select * from job j 
left outer join (
  select * from note where notetype!=2
) n 
on j.id=n.jobid;

如果您将连接表包含在其中,则左外连接可能用作内连接。

于 2012-11-12T15:34:55.607 回答