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
任何帮助将不胜感激。我尝试了不同的连接和几个子查询,但我总是得到相同的结果。
谢谢!
答案 0 :(得分:2)
由于连接,在WHERE之前的一些结果集在bugStatusID中将为NULL,因此如果您希望看到这些结果,则需要将其添加到您的位置。
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 OR es.bugStatusID IS NULL)
答案 1 :(得分:1)
您必须将限制条件移动到连接,或者还要查找空值。
WHERE hl.hotlistStatusID=100 AND hl.loadType='su' AND
(es.bugStatusID=300 or es.bugStatusID is 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子句并不重要,因为您开始获取所有记录。