如何编写tblVisitor与tblCard关联的范围匹配SQL ON子句?
解决SQL关联条件问题
你需要的关联条件可以直接通过范围匹配实现,不需要逐个写CASE WHEN,具体语法如下:
完整SQL语句
select V.Card_Id,V.Visitor_Name,C.Card_Name from tblVisitor V join tblCard C on V.Card_Id BETWEEN C.Start_Id AND C.End_Id
或者等价的写法(效果完全一致):
select V.Card_Id,V.Visitor_Name,C.Card_Name from tblVisitor V join tblCard C on V.Card_Id >= C.Start_Id AND V.Card_Id <= C.End_Id
原理说明
tblCard中的记录定义了不重叠的连续ID区间,每个tblVisitor.Card_Id必然落在且仅落在一个区间内,因此用BETWEEN(或直接的大小比较)就能精准匹配到对应的Card_Name,比CASE WHEN更简洁高效。
执行结果
执行上述SQL后会得到如下结果:
| Card_Id | Visitor_Name | Card_Name |
|---|---|---|
| 23 | PersonA | Engineer |
| 53 | PersonB | Helper |
| 101 | PersonC | Employeer |
内容的提问来源于stack exchange,提问作者Kalendar
相关产品推荐
相关产品推荐

