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

基于LEFT JOIN的MySQL多表查询:满足指定条件的Job数据需求

MySQL LEFT JOIN 分组查询解决方案

没问题,我来帮你搞定这个查询需求。先明确一下你的表结构和现有数据:

表结构与数据

job表

idnamestatus
1testactive
2checkactive

repair表

repair_idjob_idprocessstatus
11no2
21no1
31yes2
42no1
52no2

需求分析

你需要通过LEFT JOIN关联两张表,筛选出满足process != 'yes'且repair.status != 2的记录,再按job_id分组,最终得到仅包含job_id=2的结果。结合你的期望结果,核心逻辑是:找出存在至少一条符合条件的repair记录,且该job没有任何process='yes'的repair记录。

实现SQL

SELECT 
    r.job_id,
    j.name,
    j.status
FROM job j
LEFT JOIN repair r ON j.id = r.job_id
WHERE r.process != 'yes' AND r.status != 2
GROUP BY r.job_id, j.name, j.status
HAVING COUNT(CASE WHEN r.process = 'yes' THEN 1 END) = 0;

结果验证

执行这条SQL后,会得到你期望的结果:

job_idnamestatus
2checkactive

代码解释

  1. LEFT JOIN关联:通过job.id = repair.job_id关联两张表,确保关联逻辑正确。
  2. WHERE筛选:先过滤出repair表中满足process != 'yes'且status != 2的有效记录。
  3. GROUP BY分组:按job_id和job表的name、status分组(MySQL要求分组后SELECT的列需为分组列或聚合列)。
  4. HAVING子句:通过聚合逻辑排除存在process='yes'记录的job——job1因为有一条process='yes'的repair记录被排除,最终只保留符合要求的job2。

如果只是单纯筛选符合条件的记录并去重(不考虑该job是否有其他不符合的记录),可以用简化版:

SELECT DISTINCT
    r.job_id,
    j.name,
    j.status
FROM job j
LEFT JOIN repair r ON j.id = r.job_id
WHERE r.process != 'yes' AND r.status != 2;

但这条SQL会返回job1和job2两条记录,不符合你的期望,所以还是第一条SQL更贴合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:12:47