对于SQL中最后一个表中的每个元素,如何返回表中实体的值,该值小于但最接近另一个表中的值?

对于SQL中最后一个表中的每个元素,如何返回表中实体的值,该值小于但最接近另一个表中的值?,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我在MS Access中有两个表,我试图为其中一个表添加一个字段,告诉另一个表中哪个记录的值小于第一个字段的值,但最接近?到目前为止,我只有一个select语句来测试输出,而不改变现有表,但它列出了小于查询值的所有值: SELECT JavaClassFileList.ClassFile, ModuleList.Module FROM JavaClassFileList, ModuleList WHERE ModuleList.Order<JavaClassFileList.Order;`

我在MS Access中有两个表,我试图为其中一个表添加一个字段,告诉另一个表中哪个记录的值小于第一个字段的值,但最接近?到目前为止,我只有一个select语句来测试输出,而不改变现有表,但它列出了小于查询值的所有值:

SELECT JavaClassFileList.ClassFile, ModuleList.Module
FROM JavaClassFileList, ModuleList
WHERE ModuleList.Order<JavaClassFileList.Order;`  
我尝试使用select JavaClassFileList.Classfile、MAXModuleList.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
右侧可以有重复项,但左侧没有重复项。如何获得此结果?

我将使用相关子查询处理此类查询。我认为Access中有以下几个词:

SELECT jc.ClassFile,
       (select top 1 ml.Module
        from ModuleList as ml
        where ml.[Order] < jc.[Order]
       )
FROM JavaClassFileList as jc;

我假设订单对于模块是唯一的。如果不是,JavaClassFileRecords可能会在结果集中显示多次

如果找不到JavaClassFile的模块,那么它将不会显示在结果中。如果您确实希望它在这种情况下显示为空模块,请将内部联接替换为左外部联接


不幸的是,你的大部分问题都是噪音。请求SQL查询时需要添加的重要内容包括:表结构,包括主键和外键约束,以及您希望通过示例数据和所需结果实现的内容。主键是JavaClassFileList的ClassFile、ModuleList的Module和FunctionMethodList的Method。我没有指定任何foreignkeyconstraints,因为我不认为有必要这样做,因为这只是为了组织现有的数据,并以更有用的形式呈现它。JavaClassFileList中的外键是ModuleMembership在ModuleList中使用Module,但如上问题所述。最初,数据库只是一个表,包含所有内容的列表,而不管它是方法、类还是模块。示例结果:在JavaClassFileList中,前两个类文件的顺序分别为725和720。这两个类都属于同一个模块。该模块的阶数等于719,后面一个等于713。我想为这两个类返回最接近的module by order,它小于类的order值?如果是这样,那么您不应该只有一行,而是每个类文件有一行,这似乎是所需的结果。这对我不起作用,或者是因为语法无法识别,或者是与另一个查询组合时产生了奇怪的结果。看看我在这之后问的问题,这基本上是对这个问题的改写和不同的表述,因为我发现答案最有帮助。尽管这是个好主意。我在另一个数据库中试用过,效果非常好。我不知道为什么在另一个上它对我不起作用,我想部分原因是由于表的复制粘贴性质,因为它来自excel。仅供参考:合并自
SELECT j.ClassFile, m.Module
FROM JavaClassFileList j
INNER JOIN ModuleList m
ON m.Order =
    (SELECT MAX(Order)
     FROM ModuleList
     WHERE Order < j.Order)