带有所需子查询的 MySQL UPDATE

标签 mysql subquery inner-join

对于学校,我有以下任务将数据更新到数据库中:

Give all the employees (located into the employee table) who work on a project where the employee "50" (employee code) works on as well a salary raise of 250 euro

我知道我必须在 employee 中获得 SAL 列,然后将其提高 250 欧元。我目前通过以下查询完成此操作。

UPDATE `work` AS work
INNER JOIN `employee` AS employee ON employee.`CODE` = work.`W_CODE`
SET employee.`SAL` = (employee.`SAL` + 250)
WHERE work.`P_CODE` IN  ( # .... );

P_CODE 列代表项目标识符。在 work 表中,列出了他们正在从事的当前项目的所有 employee

为了获取代码为 50员工 工作的项目,我进行了以下子查询:

UPDATE `work` AS work
INNER JOIN `employee` AS employee ON employee.`CODE` = work.`W_CODE`
SET employee.`SAL` = (employee.`SAL` + 250)
WHERE work.`P_CODE` IN (SELECT work.`P_CODE` 
                        FROM `work` AS work
                        INNER JOIN `employee` AS employee ON `employee`.`CODE` = work.`W_CODE`
                        WHERE employee.`CODE` = "50");

运行此查询时,出现此错误:

Error Code: 1093. Table 'work' is specified twice, both as a target for 'UPDATE' and as a separate source for data

为了我自己的尝试,我做了一些研究,发现我不能为此使用同一张表两次。

问题

如何在子查询起作用的地方修正这个查询?可以在我第一次加入时合并吗?

最佳答案

尝试使用不同的别名,例如:w1 和 w2 for work

UPDATE `work` 
    AS w1

    INNER JOIN `employee` AS employee
        on employee.`CODE` = w1.`W_CODE`

    SET employee.`SAL` = (employee.`SAL` + 250)

    WHERE w1.`P_CODE` IN  ( select t.my_code from (
    SELECT w2.`P_CODE` as my_code 
        FROM `work` AS w2
        INNER JOIN `employee` AS employee
            ON `employee`.`CODE` = w2.`W_CODE`
        WHERE employee.`CODE` = "50"
    )  t ) ;

关于带有所需子查询的 MySQL UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935718/

相关文章:

python - 在 Python 中将 xbee 源地址存储到数据库中

sql - 我如何在 PostgreSQL 中执行 DISTINCT 和 ORDER BY?

mysql - 将表 1(外键)中的 2 列连接到表 2(主键) - 如何避免 JOIN BUFFER?

mysql - SQL查询从另一个表打印两列值

mysql - 更改排序规则时,UTF8 编码文本被错误更改

mysql - 在 VB.NET 中,调用 conn.close 或 conn.dispose 甚至使用 USING 后,MySQL 连接不会关闭

MySQL EXISTS 和 ORDER BY

subquery - FROM 语句的 Apache Impala 内部查询限制

hibernate - JPA 2.0 subselect/subquery in order by 子句和条件api

mysql - 将 2 个 SQL 查询组合在一起时出错