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

多表SQL查询技术求助:如何关联Account与User表获取user_name并筛选非活跃账户

正确的SQL查询解决方案

首先,咱们来梳理你原查询语句里的几个核心问题:

  • 没添加Account和User表的关联条件,这就是你拿不到user_name的根本原因
  • 字段引用错误:Sub_Contract_ID.basic_con_id.start_date是无效写法,start_date是Sub_Contract_ID的直接字段,应该写成Sub_Contract_ID.start_date
  • 用了中文双引号“Inactive”,SQL语法要求用英文双引号或单引号
  • 采用了旧的逗号分隔表的写法,推荐用显式JOIN语法,可读性和维护性更强

下面是修正后的查询语句,分两种常见场景给出:

场景1:所有标记为Inactive的Account都有对应的User记录(用INNER JOIN)

SELECT 
    Account.acc_id,
    Account.acc_name,
    Account.acc_status,
    User.user_name,
    Sub_Contract_ID.basic_con_id,
    Sub_Contract_ID.start_date,
    Sub_Contract_ID.end_date
FROM Account
INNER JOIN User ON Account.acc_owner_id = User.role_id
INNER JOIN Sub_Contract_ID 
    -- 注意:你没说明Account和Sub_Contract_ID的关联关系!
    -- 请替换成实际业务的关联条件,比如假设是Account.acc_id = Sub_Contract_ID.acc_id(示例)
    ON Account.acc_id = Sub_Contract_ID.acc_id
WHERE Account.acc_status = 'Inactive';

场景2:即使Inactive的Account没有对应的User记录,也要保留该Account数据(用LEFT JOIN)

SELECT 
    Account.acc_id,
    Account.acc_name,
    Account.acc_status,
    User.user_name, -- 无对应User时该字段会显示NULL
    Sub_Contract_ID.basic_con_id,
    Sub_Contract_ID.start_date,
    Sub_Contract_ID.end_date
FROM Account
LEFT JOIN User ON Account.acc_owner_id = User.role_id
LEFT JOIN Sub_Contract_ID 
    -- 同样需要替换成实际的Account与Sub_Contract_ID关联条件
    ON Account.acc_id = Sub_Contract_ID.acc_id
WHERE Account.acc_status = 'Inactive';

关键提醒:

你提供的表结构里没说明Account和Sub_Contract_ID之间的关联关系,上面示例里我假设了Account.acc_id = Sub_Contract_ID.acc_id作为连接条件,一定要根据你的实际业务逻辑替换成正确的关联字段哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:47:48