我的查询中有错误,但我不知道会发生什么。所以有3张桌子。
表格1
name grade min max
a
b
c
d
e
表 2
fullname name min max
a a123 1 10
bbbb b 2 20
c cccc 3 30
d dd 1 10
E Ed 2 20
表3
value grade
25 A
15 B
5 C
我的目标是使用名称,显示名称的等级(表 3 中的最大值 > 值)。
例如,c 最多 30,它应该有 A 级,而不是 B 和 C。
此外,名称通常是表 2 中的全名,但有时它是表 2 中的名称(如 b)(这是错误之一)。桌子就是这样的,我不能改变它。
如果我不包括检查table 1.name = table 2.name。完全没有错误,但无法为 b 评分
如果我包括table 1.name = table 2.name.then,它有问题
对于匹配等级的查询,它就像(假设从表2中获取最小值和最大值)
update table1
set table1.grade = table3.grade
from table1 inner join table3
on table1.max > table3.value
所有案例都包括检查 table 1.name = table 2.name
情况 1:如果包含一些数据,则所有数据的等级将等于 = C。
例如,在table1中,如果我不包括E,那么一切都很好。
但如果我包括 E,所有记录都会得到 C 级。
案例2:如果我同时对所有数据运行查询,结果会出错。如果我一一更新记录,它就可以正常工作。例如,我在更新查询中添加了一个条件
update table1
set table1.grade = table3.grade
from table1 inner join table3
on table1.max > table3.value and fullname='c'
在得到错误的结果后,我添加条件并再次运行它,然后 c 将获得等级 'A' 而不是 'C'。但是如果我删除条件并再次运行查询。c 将再次获得“C”级。
案例3:当我只单独运行会导致案例1问题的数据集时没有问题。但如果我把数据放在一起,就会出现问题。
这就是所有情况。我不知道是什么导致了问题。请帮忙
结果应该是:表1
name grade min max
a C 1 10
b B 2 20
c A 3 30
d C 1 10
e B 2 20
如果我删除table1.name = table2.name,结果将是
表格1
name grade min max
a C 1 10
b null null null
c A 3 30
d C 1 10
e B 2 20
,table1.name = table2.name结果将是
表格1
name grade min max
a C 1 10
b C 2 20
c C 3 30
d C 1 10
e C 2 20
但删除 e ,table1.name = table2.name结果将是
表格1
name grade min max
a C 1 10
b B 2 20
c A 3 30
d C 1 10
但仅适用于table1.name = table2.namee,结果将是
name grade min max
e B 2 20
当我对整个表运行更新查询时,就会发生这种情况。table1.name = table2.name如果我一一更新每一行是没有问题的。