如何在一个表中小于返回一个实体的价值,但最接近值在另一个表中的SQL最后表中的每个元素?(How d

2019-10-20 06:01发布

我在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,I必称他们每个存储各种信息,而在列存储的732的值,和b是存储在同一列中的731值。 c为存储720的值。在另一个表中,d被存储的730的值,以及E是存储的718的值我想是这样的输出(它们是有序的最大到最小):

  • 732 d 730
  • b 731 d 730
  • Ç720ë718

可以有右侧重复,而是在左边没有重复。 我怎样才能得到这样的结果?

Answer 1:

我会使用相关子查询接近这种类型的查询。 我想下面的话中访问:

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


Answer 2:

我假设秩序是模块唯一的。 如果不是,JavaClassFileRecords可能在结果中多次出现。

如果没有模块可以为JavaClassFile找到那么就不会在搜索结果中。 如果你希望它在这样的情况下显示出来(用空模块),更换INNER JOINLEFT OUTER JOIN

SELECT j.ClassFile, m.Module
FROM JavaClassFileList j
INNER JOIN ModuleList m
ON m.Order =
    (SELECT MAX(Order)
     FROM ModuleList
     WHERE Order < j.Order)


文章来源: How do I return a value of an entity in a table that is less than but closest to the value in another table for each element in the last table in SQL?