You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于子查询返回的列值从另一表中查询记录

基于子查询结果关联另一张表的实现方案

首先先把你提到的子查询补全(根据你的示例数据,计算MONTHS用MySQL的TIMESTAMPDIFF会更准确):

SELECT 
  `POST`,
  `START_DATE`,
  `END_DATE`,
  TIMESTAMPDIFF(MONTH, `START_DATE`, IFNULL(`END_DATE`, CURDATE())) AS MONTHS
FROM your_job_history_table;

这个查询会生成你给出的示例结果集:

POSTSTART_DATEEND_DATEMONTHS
Senior Software Engg.2018-04-18NULL(当前日期到2018-04-18的月数)
Software Engg.2017-04-182018-04-1812
Assoc. Software Engg.2016-04-182017-04-1812

接下来,假设你要关联的另一张表叫employee_performance,里面有job_title、performance_score、review_date等字段,下面给你几种常用的筛选方式:

1. 通过JOIN关联匹配字段

如果你想匹配两张表中职位名称一致的记录,可以用INNER JOIN(只保留双向匹配的记录)或者LEFT JOIN(保留子查询的所有记录,关联表无匹配则显示NULL):

SELECT 
  jh.`POST`,
  jh.`START_DATE`,
  ep.performance_score,
  ep.review_date
FROM (
  -- 你的子查询
  SELECT 
    `POST`,
    `START_DATE`,
    `END_DATE`,
    TIMESTAMPDIFF(MONTH, `START_DATE`, IFNULL(`END_DATE`, CURDATE())) AS MONTHS
  FROM your_job_history_table
) AS jh
INNER JOIN employee_performance ep
  ON jh.`POST` = ep.job_title;

2. 通过IN子查询筛选特定列值

如果只需要筛选另一张表中职位出现在子查询结果里的记录,可以用IN子句,还能给子查询加额外过滤条件:

SELECT *
FROM employee_performance
WHERE job_title IN (
  SELECT `POST`
  FROM your_job_history_table
  -- 比如只选任职时长超过10个月的职位
  WHERE TIMESTAMPDIFF(MONTH, `START_DATE`, IFNULL(`END_DATE`, CURDATE())) > 10
);

3. 基于日期范围筛选

如果要找到某职位任职期间的关联记录(比如绩效评审),可以基于日期范围关联:

SELECT 
  jh.`POST`,
  ep.performance_score,
  ep.review_date
FROM (
  SELECT 
    `POST`,
    `START_DATE`,
    IFNULL(`END_DATE`, CURDATE()) AS END_DATE
  FROM your_job_history_table
) AS jh
INNER JOIN employee_performance ep
  ON jh.`POST` = ep.job_title
  AND ep.review_date BETWEEN jh.START_DATE AND jh.END_DATE;

你可以根据实际的表结构和筛选需求调整JOIN条件或者WHERE子句就行。

内容的提问来源于stack exchange,提问作者Azima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:02:17