根据第二个表中列 y 的最大值连接列 x 上的 2 个表

Posted

技术标签:

【中文标题】根据第二个表中列 y 的最大值连接列 x 上的 2 个表【英文标题】:Join 2 tables on column x based on max value of column y in second table 【发布时间】:2017-08-01 12:43:04 【问题描述】:

我在这里阅读了一些帖子。使用这篇文章 (Select value A from the same record as max( value B) and then join with another table on value C) 我已经开始查询,但它不起作用。 Access 中是否允许嵌套 SELECT 查询?

领子

_______________________
|hole_id|max_depth|...|
|  1    |  340    |   |
|  2    |  400    |   |
|  3    |  250    |   |

检测

______________________
|hole_id|depth_to|...|
|  1    |  58    |   |
|  1    |  62    |   |
|  1    |  69    |   |
|  2    |  102   |   |
|  2    |  110   |   |
|  3    |  20    |   |
|  3    |  25    |   |

我要回去

________________________________
|hole_id|max_depth|depth_to|...|
|  1    |  340    |  69    |   |
|  2    |  400    |  110   |   |
|  3    |  250    |  25    |   | 

-

SELECT DISTINCT A.hole_id, A.max_depth, B.depth_from, B.depth_to
FROM collar A
LEFT JOIN assay B
ON A.hole_id = B.hole_id
WHERE A.hole_id = (
     SELECT max(C.depth_to)
     FROM assay C
     WHERE C.hole_id = A.hole_id
     )
WHERE A.max_depth > B.depth_to AND A.section="BLK" AND A.holetype="Exploration"
;

【问题讨论】:

我应该提到我有各种各样的其他领域,但我认为它们与逻辑无关。 【参考方案1】:

只需连接两个表,返回最大 depth_to 并将其余的分组。在这种情况下不需要嵌套查询。

SELECT      assay.hole_id
            , max_depth
            , MAX(depth_to) AS max_depth_to
FROM        assay LEFT JOIN collar ON assay.hole_id = collar.hole_id
GROUP BY    assay.hole_id, max_depth
ORDER BY    assay.hole_id

如果每个字段名对一个表来说是唯一的,也不需要完全限定它。

【讨论】:

【参考方案2】:
SELECT collar.hole_id, collar.max_depth, (select max(depth_to) from assay where assay.hole_id=collar.hole_id) AS depth_to
FROM collar;

【讨论】:

【参考方案3】:

是的,嵌套的SELECT 查询可以在 Access 中完成。这里有一个可能会给你你正在寻找的东西:

SELECT
    A.hole_id, 
    A.max_depth, 
    B.depth_from, 
    B.depth_to
FROM 
    collar A
LEFT JOIN 
    (select B.*
    from assay B
        inner join (
            select hole_id, max(depth_to) as max_depth
            from assay
            group by hole_id
            ) BD on BD.hole_id=B.hole_id and BD.max_depth=B.depth_to
     ) as BM on BM.hole_id=A.hole_id
WHERE 
    A.section="BLK" AND A.holetype="Exploration"
;

【讨论】:

以上是关于根据第二个表中列 y 的最大值连接列 x 上的 2 个表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle:将两个表与一个公共列加上第二个表中的一个附加列(最新生效日期)连接以选择其他列

如何将两个表与 SQL Server 中第二个表中引用同一列的两列连接起来

如何从内部连接的第二个表中按列选择前 1 个顺序 desc?

根据第二个表中的条件更新表

Laravel 连接 2 个表,第一个表中的一个数据和第二个表中的多行

左外连接 - 如何在第二个表中返回一个布尔值?