【问题标题】:Mysql Update With WHERE IN AND JOINSMysql 使用 WHERE IN 和 JOINS 更新
【发布时间】:2019-05-23 15:31:47
【问题描述】:

我尝试了不同的方法,但我不知道我需要在哪里放置大括号以及如何正确地使这个查询工作。

我得到的错误是:

ERROR 1093 (HY000): You can't specify target table 'tb1' for update in FROM 子句

代码:

    UPDATE tb1
SET company_id=258
WHERE id IN
    (SELECT c.well_id container_well_id
     FROM tb2 b
     INNER JOIN tb3 c ON b.id = c.id
     INNER JOIN tb1 w ON w.id = c.well_id
     WHERE b.id_number IN (2609,
                           4279,
                           4082,
                           4083,
                           4117,
                           3818,
                           3154,
                           3813,
                           3822,
                           3819)
       AND c.company_id = 258
       AND w.company_id = 259 );

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    一种方法是改用join:

    UPDATE tb1 JOIN
           (SELECT c.well_id container_well_id
            FROM tb2 b JOIN
                 tb3 c ON b.id = c.id JOIN
                 tb1 w ON w.id = c.well_id
            WHERE b.id_number IN (2609, 4279, 4082, 4083, 4117, 3818, 3154, 3813, 3822, 3819
                                 ) AND
                  c.company_id = 258 AND
                  w.company_id = 259
            ) x
            ON x.container_well_id = tb1.id
        SET company_id = 258;
    

    【讨论】:

      【解决方案2】:

      只需添加一个外部选择来嵌套您当前的子查询:

      UPDATE tb1
      SET company_id=258
      WHERE id IN
        (SELECT t.container_well_id FROM
          (SELECT c.well_id container_well_id
           FROM tb2 b
           INNER JOIN tb3 c ON b.id = c.id
           INNER JOIN tb1 w ON w.id = c.well_id
           WHERE b.id_number IN (2609,
                                 4279,
                                 4082,
                                 4083,
                                 4117,
                                 3818,
                                 3154,
                                 3813,
                                 3822,
                                 3819)
             AND c.company_id = 258
             AND w.company_id = 259 ) t
        );
      

      【讨论】:

        猜你喜欢
        • 2018-05-16
        • 2021-08-02
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 2016-03-03
        相关资源
        最近更新 更多