SQL中用大于小于条件关联两张表的写法是否正确?
你的SQL写法完全正确,JOIN中可以使用大于/小于这类比较运算符
- 你这里用的是非等值连接(Non-equijoin),这是SQL中完全合法的连接方式,和常见的等值连接(比如
ON E.Id = T.EmployeeId)一样被所有主流数据库支持。 - 你的逻辑清晰:通过
E.Salary >= T.LowerSalaryRange and E.Salary < T.HigherSalaryRange精准匹配薪资对应的税率区间,从你给出的测试数据来看,执行结果会是正确的:- David的薪资1200匹配到税率0.3,计算结果为
1200 * 0.3 = 360 - Felix的薪资2200匹配到税率0.4,计算结果为
2200 * 0.4 = 880
- David的薪资1200匹配到税率0.3,计算结果为
额外注意事项
- 要确保
Tax表的薪资区间没有重叠且覆盖所有可能的薪资范围,否则会出现一个员工匹配到多个税率(结果重复)或者完全匹配不到(结果缺失)的问题。比如你当前的区间在2000和2001之间有个缺口,如果有员工薪资是2000,就会匹配不到任何税率,需要调整区间逻辑(比如把第二个区间的Lower设为2000,条件改成E.Salary <= T.HigherSalaryRange)。 - 如果需要展示员工姓名等更多信息,可以在SELECT语句中添加对应字段,比如
SELECT E.Employee, E.Salary, T.TaxRate, E.Salary * T.TaxRate AS TaxAmount。
内容的提问来源于stack exchange,提问作者VB IN
相关产品推荐
相关产品推荐

