2012-11-12 115 views
0

我挣扎着,也许是有史以来最简单的问题。我的SQL知识几乎限制了我实现这一点。我正在尝试构建一个应该显示JobTitle,Note和NoteType的sql查询。这是事情,第一份工作没有任何说明,但我们应该在结果中看到它。系统笔记永远不会显示。预期的结果应该是这样的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   | 
-------------------------------------------- 

回答

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是匹配检索但其行得到过滤的,因为那里的条件了。

请尝试以下方式以解决第三个作业中出现空值的问题。

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 
+0

对不起,我复制时犯了错误。我知道它应该是或者但仍然有问题。 –

+0

@MehmetBudak:什么问题?是否一样(第三份工作没有被选中)和第一份工作是否来临? –

+0

是的,我希望看到第三份工作。 –

1

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

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

如果包括连接表到那里,然后左外连接可能工作作为内部连接。

+0

但这不返回第三份工作。 –

+0

现在它:) :)编辑 – Tiit

+0

谢谢你的朋友;) –