积跬步、至千里

测绘·建库·制图·数据分析

ACCESS用SQL语句跨表获取最大值或最小值并在另一个表内引用

现在有这样的一个需求:

ACCESS有多个表,每个表有个单独存放顺序号的字段(A),不是objectid,objectid也有,本来就是A和objectid相同。但两者是不同的字段。
目前每个表的顺序号都是在当前表内排序的(从1到最大),现在要求是整个数据库的顺序号都不重复,人肉实现就是记住上一个表的顺序号最大值,然后再把这个最大值加到当前表的顺序号上,以此类推一个接一个手动改。

这样效率不高因为库总是要变动表又很多。

举例说:
有甲乙丙丁表,每个表里的顺序字段A都是从1开始计算。
要实现的是:
甲表顺序号字段A是1到9,
乙表顺序号字段A是10到45,
丙表顺序号字段A是46-87……
以此类推。
每个表顺序号的最大数不一定是多少所以无法在语句中手动指定。

 

下面介绍一个非常好用的函数:DMAX 和DMIN

DMAX语法:DMax(expr, domain, [criteria])

用人话表示就是DMAX(“字段名”,”表名”,”标准(可略)”)

举例就是,有个表名字叫”呵呵”,里面”姓名”字段内的”小红”有很多成绩,成绩在字段”分数”下,现在想要她的成绩的最大数,语句写做如下:

DMax(“分数”,”呵呵”,”姓名=’小红'”)

(注意上面例子中的引号用法。)

当然,如果你只想要整个表里的最大的分数是多少,就是这样的:

DMAX(“分数”,”呵呵”)

返回出来的就是整表的最大数。

那么如何在文章开始的需求里使用呢?不罗嗦直接放语句:

UPDATE 要更新的表 SET 要更新的字段=OBJECTID+DMAX(“要获取最大数的表的字段”,”要获取最大数的表名”);

实在不想写得太深奥,直接给你翻译成人话了。用的时候直接套用就可以。

如果你要是更新得表比较多,表又是固定的名称,字段也是固定的名称,那么可以参考本网站另一篇文章:ACCESS批量运行多个SQL语句 需要注意的是,在strSQL里,嵌套的双引号要改成单引号才能用

微信扫码关注公众号,回复“邀请码”获取用来注册的信息。部分文章加密需要登陆的是本站原创文章,不同于网络上其它教程,请珍惜劳动成果。
点赞

发表评论