有兩張表数苫,項(xiàng)目表bizProject和專家投票表ExpertVote, 需要做一個(gè)功能讓登錄人進(jìn)行反復(fù)投票,也就是查詢出登錄人未投票和已經(jīng)投票過的項(xiàng)目耸携。假設(shè)登錄人ID為6。
項(xiàng)目表的字段有:主鍵(ID)辕翰、項(xiàng)目名稱(projectName)夺衍。
專家投票表的字段有:主鍵(ID)、投票意見(passFlag)喜命、投票人ID(SysUserId)沟沙、項(xiàng)目ID(BizProjectId)河劝。
正確的查詢是以下第一種!
1.left join on 后面的條件
select bp.id BizProjectId, bp.projectName projectName, ev.Id ExpertVoteId, ev.passFlag passFlag, ev.SysUserId SysUserId
from bizProject bp
left join ExpertVote ev on ev.BizProjectId=bp.Id and ev.SysUserId=6
where 1=1
order by bp.Id asc
--查詢出來的記錄有10條矛紫,登錄人待投票的項(xiàng)目以及已經(jīng)投票過的項(xiàng)目赎瞎。
image.png
2.where 后面的條件
select bp.id BizProjectId, bp.projectName projectName, ev.Id ExpertVoteId, ev.passFlag passFlag, ev.SysUserId SysUserId
from bizProject bp
left join ExpertVote ev on ev.BizProjectId=bp.Id
where 1=1
and ev.SysUserId=6
order by bp.Id asc
--查詢出來的記錄有7條,查出的是登錄人已經(jīng)投票過的項(xiàng)目颊咬。
image.png
只需記孜裆:where后面只大條件。
PS:where 1=1 是為了避免where 關(guān)鍵字后面的第一個(gè)詞直接就是 “and”而導(dǎo)致語法錯(cuò)誤喳篇。
例如:A left join B on
on 后面的條件敞临,其實(shí)就是對 B 數(shù)據(jù)的過濾,
如果對A 的數(shù)據(jù)過濾麸澜,或?qū)﹃P(guān)聯(lián)結(jié)果的過濾挺尿,要放在 where 后;
本文主要來源于:https://blog.csdn.net/machinecat0898/article/details/45788273