看来我以前已经做到了,但是又挣扎了。这是我的数据:
tblHotlist
----------
ID
hotlistStatus
buildNumber
loadType
etc
tblessr
-------
ID
esHeadline
notesStatus
actionItems
bugStatusID
etc
tblBugStatus (not needed in query)
------------
ID
bugStatus
etc
tbl_j_hlbug
-----------
esID
hotlistID
timestamp
我想要tblHotlist中的所有记录,如果tblESSR中存在记录,则需要bugStatusID = 300的记录。我尝试了几种不同的联接和子查询,但仍然无法获得所需的结果。放入bugStatusID = 300的限定词后,我只能从tblHotlist获得记录,而来自tblESSR的记录的bugStatusID为300。
失败的尝试:
SELECT hl.hotlistID, hl.buildnumber, es.ID, es.notesStatus, es.actionItems
FROM tblhotList hl
LEFT OUTER JOIN tbl_j_hlbug j ON j.hotlistID = hl.id
LEFT OUTER JOIN tblESSR es ON j.esrID = es.id
WHERE hl.hotlistStatusID=100 AND hl.loadType='su' AND es.bugStatusID=300
任何帮助,将不胜感激。我尝试了不同的联接和几个子查询,但是我总是得到相同的结果。
谢谢!
您要么必须将限制条件移至联接,要么还要寻找空值。
WHERE hl.hotlistStatusID=100 AND hl.loadType='su' AND
(es.bugStatusID=300 or es.bugStatusID is null)
当发生外部联接时,您必须考虑在没有匹配数据的记录上将存在空值。这样,如果您尝试限制这些内容,最终将排除不包含匹配数据的空值;从而否定外部联接。有时这就是您想要的……有时不是。在这种情况下,我认为您需要null和300。
SELECT hl.hotlistID, hl.buildnumber, es.ID, es.notesStatus, es.actionItems
FROM tblhotList hl
LEFT OUTER JOIN tbl_j_hlbug j ON j.hotlistID = hl.id
LEFT OUTER JOIN tblESSR es
ON j.esrID = es.id
AND es.bugStatusID=300
WHERE hl.hotlistStatusID=100 AND hl.loadType='su'
Hl where子句无关紧要,因为您将获得所有记录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句