sql - 查询问题——包含一个条件或一组数据时得到错误结果
问题描述
我的查询中有错误,但我不知道会发生什么。所以有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.name
e,结果将是
name grade min max
e B 2 20
当我对整个表运行更新查询时,就会发生这种情况。table1.name = table2.name
如果我一一更新每一行是没有问题的。
解决方案
至少,您应该避免更新表格的方式。您应该小心更新连接。如果您碰巧在同一行有多个值,则结果是不确定的。更好地使用这种形式:
update table1
set table1.grade = (SELECT TOP 1 table3.grade FROM table3
WHERE table3.value < table1.max
ORDER BY table3.value DESC)
推荐阅读
- flutter - 加载第一个共享屏幕时多次单击打开多个共享屏幕
- google-cloud-platform - Google Cloud BlobListOption 仅迭代 currentDir 下一级
- node.js - 设置环境变量以在 express node.js 中动态更改端口
- haskell - QuickCheck 如何检测数据类型?
- google-cloud-dataproc - 如果一项作业失败,托管 Dataproc 集群将终止所有作业
- c# - 如何将锯齿状数组 byte[][] 保存到文件中?
- php - 在控制器中循环调用自己的应用程序 api 是否明智?
- python - 将 numpy 数组的第二列转换为虚数
- java - 在 android studio para mí org.gradle.execution.MultipleBuildFailures 中构建应用程序时出错
- php - 重定向回来后如何在表单中添加标题?