【发布时间】:2014-07-27 01:59:56
【问题描述】:
我在 MS Access 中有两个表,我正在尝试为其中一个表添加一个字段,该字段告诉另一个表中的哪条记录的值小于第一个字段的值,但最接近?到目前为止,我有这个查询(只是一个用于测试输出而不更改现有表的 select 语句),但它列出了所有小于查询值的值:
SELECT JavaClassFileList.ClassFile, ModuleList.Module
FROM JavaClassFileList, ModuleList
WHERE ModuleList.Order<JavaClassFileList.Order;`
我尝试使用SELECT JavaClassFileList.Classfile, MAX(ModuleList.Module) 之类的东西,它只会显示最大模块,但将它与上面的 select 语句结合起来,但它会说它只会返回一条记录。
期望的输出:我有一些记录,a、b 和 c,我将调用它们,每个记录存储各种信息,而 a 在列中存储值 732,b 在列中存储值 731同一列。 c 存储的值是 720。在另一个表中,d 存储的值是 730,e 存储的值是 718。我想要这样的输出(它们从大到小排序):
- a 732 d 730
- b 731 d 730
- c 720 e 718
右边可以有重复,但左边不能有重复。我怎样才能得到这个结果?
【问题讨论】:
-
不幸的是,您的大部分问题都是噪音。询问 SQL 查询时要添加的重要内容是:表结构(包括主键和外键约束)以及您想要完成的确切内容(最好使用示例数据和所需结果)。
-
主键是 JavaClassFileList 的 ClassFile、ModuleList 的 Module 和 FunctionMethodList 的 Method。我没有指定任何外键约束,因为我认为没有必要这样做,因为这只是组织现有数据并以更有用的形式呈现。 JavaClassFileList 中的外键是 ModuleMembership(使用 ModuleList 中的 Module,但如上述问题中所述)。最初,数据库只是一个包含所有内容列表的表(无论它是方法、类还是模块)。它们是根据它们在原始表中的顺序进行编号的。
-
示例结果:在 JavaClassFileList 中,前两个类文件的 Order 分别等于 725 和 720。这两个类都属于同一个模块。该模块的 Order 等于 719,之后的一个等于 713。我想为这两个类返回最接近的模块,其顺序小于类的 order 值。
-
当您使用
SELECT JavaClassFileList.Classfile, MAX(ModuleList.Module)时,您是否也使用了GROUP BY JavaClassFileList.Classfile?如果是这样,那么您不应该只有一行,而是每个 classFile 一行,这似乎是所需的结果。
标签: sql ms-access ms-access-2010