根据第二个表中列 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?