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

如何无需关联salaries、titles、employees表更新Assistant Engineer的薪资?

问题解答

首先明确:可以不用写显式的多表内连接语法,但要筛选出Assistant Engineer的薪资记录,还是得通过emp_no关联salaries和titles表——毕竟薪资数据在salaries,职位信息在titles,两者靠员工编号关联,绕不开这个关联逻辑,只是写法可以换。

你的脚本存在的问题

  • 子查询(SELECT salaries.emp_no, titles.title FROM salaries)没有关联titles表,会产生无效的笛卡尔积,完全不符合需求
  • SET s.salary = salaries + 500里的salaries未指定别名,应该用s.salary
  • 语法结构错误:INNER JOIN后的子查询缺少关联条件,括号不匹配,WHERE子句引用titles表但未正确关联
  • 存储过程结尾缺少必要的;

替代写法(无需显式多表内连接的写法)

可以用WHERE EXISTS子查询来关联titles表,这样写法上避免了显式内连接,同时实现需求:

DELIMITER //
DROP PROCEDURE IF EXISTS psegui3 //
CREATE PROCEDURE psegui3()
BEGIN
    -- 给当前在职的Assistant Engineer加薪500
    UPDATE salaries s
    SET s.salary = s.salary + 500
    WHERE s.to_date = '9999-01-01'
      AND EXISTS (
          SELECT 1
          FROM titles t
          WHERE t.emp_no = s.emp_no
            AND t.title = 'Assistant Engineer'
            AND t.to_date = '9999-01-01'
      );
END //
DELIMITER ;

补充说明

如果完全不关联任何表,根本无法定位到Assistant Engineer的薪资记录——因为salaries表本身没有职位信息,必须依赖titles表的职位筛选。上面的写法用EXISTS替代了显式的INNER JOIN,满足你不想用内连接语法的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:05:43