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

MySQL:根据主表字段值从关联表中获取数据行

嘿,我来帮你搞定这个MySQL关联查询的需求~根据你给出的两张表结构,我们可以通过JOIN操作来关联Service表和request_status表,从而获取对应的数据行。下面分几种常见场景给出解决方案:

解决方案

1. 基础关联查询:获取所有匹配的状态记录

首先,两张表的核心关联字段是service_id和userid(注意request_status表中的字段是Userid,MySQL默认不区分大小写,但建议保持字段名统一避免混淆)。

仅返回两边都有匹配的记录(INNER JOIN)

如果只需要获取那些在request_status表中有对应状态记录的Service数据,可以用INNER JOIN:

SELECT 
    s.service_id,
    s.userid,
    s.service_name,
    s.pending,
    s.accepted,
    s.completed,
    rs.id AS status_id,
    rs.status,
    rs.accepted_date
FROM Service s
INNER JOIN request_status rs 
    ON s.service_id = rs.service_id 
    AND s.userid = rs.Userid;

返回所有Service记录(LEFT JOIN)

如果想保留所有Service表的条目,即使某些Service还没有对应的状态记录(此时状态字段会显示NULL),就用LEFT JOIN:

SELECT 
    s.service_id,
    s.userid,
    s.service_name,
    s.pending,
    s.accepted,
    s.completed,
    rs.id AS status_id,
    rs.status,
    rs.accepted_date
FROM Service s
LEFT JOIN request_status rs 
    ON s.service_id = rs.service_id 
    AND s.userid = rs.Userid;

2. 根据Service的状态过滤结果

如果需要只获取Service表中特定状态的条目对应的状态记录,比如只看pending=1的Service,可以添加WHERE条件:

SELECT 
    s.service_id,
    s.userid,
    s.service_name,
    rs.status,
    rs.accepted_date
FROM Service s
INNER JOIN request_status rs 
    ON s.service_id = rs.service_id 
    AND s.userid = rs.Userid
WHERE s.pending = 1;

3. 获取每个Service的最新状态记录

如果每个Service在request_status表中有多条状态记录,而你只需要最新的那一条,可以用窗口函数(MySQL 8.0及以上版本支持):

SELECT 
    service_id,
    userid,
    service_name,
    pending,
    accepted,
    completed,
    status_id,
    status,
    accepted_date
FROM (
    SELECT 
        s.service_id,
        s.userid,
        s.service_name,
        s.pending,
        s.accepted,
        s.completed,
        rs.id AS status_id,
        rs.status,
        rs.accepted_date,
        -- 按service_id分组,按时间倒序编号,最新的记录编号为1
        ROW_NUMBER() OVER (PARTITION BY s.service_id ORDER BY rs.accepted_date DESC) AS rn
    FROM Service s
    LEFT JOIN request_status rs 
        ON s.service_id = rs.service_id 
        AND s.userid = rs.Userid
) t
WHERE rn = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:27:46