SQL加入两个表

时间:2012-11-12 15:27:08

标签: tsql

我在挣扎,也许是最简单的问题。我的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         |
--------------------------------------------

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;

如果将连接表包含在哪里,那么左外连接可以用作内连接。