/ / SQL Statement LEFT JOIN nemôžem získať výsledok hľadám - sql, sql-server, sql-server-2008

SQL Statement LEFT JOIN nemôže získať výsledok hľadám - sql, sql-server, sql-server-2008

Dobrý deň, mám tento SQL nižšie, ale ja som sproblém s tým zachovať záznam Účasť v Attendance tabuľke a poznámky v tabuľke StaffComments, ale ja tiež mať tabuľku ContractorsComments witch používa rovnakú stôl prezerania a NotesID stĺpec v niektorých prípadoch zdvojnásobil

dodávatelia majú rôzne PRN na zamestnancov, ktoré som sa pokúsil použiť

WHERE dbo.StaffComments.PRN = 15458 a dbo.Attendance.PRN = 15458

ale to spôsobí, že ukáže len záznamy, kde je nájdená zhoda v oboch tabuľkách

Potrebujem SQL zobraziť všetky poznámky v tabuľke dbo.StaffComments, ale iba záznamy s rovnakým PRN v dbo.Attendance

 SELECT Comments, PRN, id, DateMade, UserID, Reason, EventDate, AttendanceID, Sdate, Edate
FROM (
SELECT dbo.StaffComments.Comments, dbo.StaffComments.PRN, dbo.StaffComments.id, dbo.StaffComments.DateMade, dbo.StaffComments.UserID, dbo.StaffComments.Reason,
dbo.StaffComments.EventDate, dbo.Attendance.id AS AttendanceID, dbo.Attendance.Sdate, dbo.Attendance.Edate, ROW_NUMBER() OVER (ORDER BY dbo.StaffComments.ID DESC) AS RowNum
FROM dbo.StaffComments
LEFT JOIN dbo.Attendance
ON dbo.StaffComments.id = dbo.Attendance.NoteID
WHERE dbo.StaffComments.PRN = 15458
) AS notes
WHERE notes.RowNum BETWEEN 1 AND 100

odpovede:

1 pre odpoveď č. 1

Aktualizujte svoju klauzulu ON, aby sa pripojila k PRN

LEFT JOIN dbo.Attendance
ON dbo.StaffComments.id = dbo.Attendance.NoteID
AND dbo.StaffComments.PRN = dbo.Attendance.PRN
WHERE dbo.StaffComments.PRN = 15458

Aktualizovaný dotaz bude vyzerať takto:

SELECT Comments, PRN, id, DateMade, UserID, Reason, EventDate, AttendanceID, Sdate, Edate
FROM (
SELECT dbo.StaffComments.Comments, dbo.StaffComments.PRN, dbo.StaffComments.id, dbo.StaffComments.DateMade, dbo.StaffComments.UserID, dbo.StaffComments.Reason,
dbo.StaffComments.EventDate, dbo.Attendance.id AS AttendanceID, dbo.Attendance.Sdate, dbo.Attendance.Edate, ROW_NUMBER() OVER (ORDER BY dbo.StaffComments.ID DESC) AS RowNum
FROM dbo.StaffComments
LEFT JOIN dbo.Attendance
ON dbo.StaffComments.id = dbo.Attendance.NoteID
AND dbo.StaffComments.PRN = dbo.Attendance.PRN
WHERE dbo.StaffComments.PRN = 15458
) AS notes
WHERE notes.RowNum BETWEEN 1 AND 100

0 pre odpoveď č. 2

Prečo sa pripojíte na staffcomments.id a attendance.noteid?

Musíte sa pripojiť k PRN ako predtým, ale s vonkajším spojom.

SELECT Comments, PRN, id, DateMade, UserID, Reason, EventDate, AttendanceID, Sdate, Edate
FROM (
SELECT dbo.StaffComments.Comments, dbo.StaffComments.PRN, dbo.StaffComments.id, dbo.StaffComments.DateMade, dbo.StaffComments.UserID, dbo.StaffComments.Reason,
dbo.StaffComments.EventDate, dbo.Attendance.id AS AttendanceID, dbo.Attendance.Sdate, dbo.Attendance.Edate, ROW_NUMBER() OVER (ORDER BY dbo.StaffComments.ID DESC) AS RowNum
FROM dbo.StaffComments
LEFT OUTER JOIN dbo.Attendance
ON dbo.StaffComments.PRN = dbo.Attendance.PRN
WHERE dbo.StaffComments.PRN = 15458
) AS notes
WHERE notes.RowNum BETWEEN 1 AND 100