代码之家  ›  专栏  ›  技术社区  ›  Björn C

mySQL:我应该把我的手机放在哪里?

  •  0
  • Björn C  · 技术社区  · 8 年前

    我想加一个WHERE子句。
    我该怎么办?

    这是我的疑问:

    UPDATE  usr_time_reg
    JOIN users  ON usr_time_nr = usr_time_reg.usr_time_nr
    SET usr_time_reg.usr_employment = users.employment;
    

    我想补充一点: WHERE usr_time_reg.usr_emplyoment = "Övrigt"

    我试过:

    UPDATE usr_time_reg
    JOIN users  ON usr_time_nr = usr_time_reg.usr_time_nr, 
    usr_time_reg.usr_employment = "Övrigt"
    SET usr_time_reg.usr_employment = users.employment;
    
    UPDATE usr_time_reg
    JOIN users ON usr_time_nr = usr_time_reg.usr_time_nr
    SET usr_time_reg.usr_employment = users.employment
    WHERE usr_time_reg.usr_employment = "Övrigt";
    
    UPDATE usr_time_reg
    JOIN users ON usr_time_nr = usr_time_reg.usr_time_nr
    WHERE usr_time_reg.usr_employment = "Övrigt"
    SET usr_time_reg.usr_employment = users.employment;
    
    UPDATE usr_time_reg
    JOIN users ON usr_time_nr = usr_time_reg.usr_time_nr
    AND usr_time_reg.usr_emplyment = "Övrigt"
    SET usr_time_reg.usr_employment = users.employment;
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Lepanto    8 年前

    请尝试以下内容,因为其中缺少表引用 ON

    UPDATE usr_time_reg
    JOIN users ON users.usr_time_nr = usr_time_reg.usr_time_nr
    SET usr_time_reg.usr_employment = users.employment
    WHERE usr_time_reg.usr_employment = "Övrigt";
    

    具有 JOIN

    UPDATE usr_time_reg as tr, users as ur
    SET tr.usr_employment = ur.employment
    WHERE ur.usr_time_nr = tr.usr_time_nr and tr.usr_employment = "Övrigt";
    

    在连接表时,在字段名之前添加表别名以避免 ambiguous column 错误

        2
  •  1
  •   Tim Biegeleisen    8 年前

    以下查询应该可以工作:

    UPDATE usr_time_reg u1
    INNER JOIN users u2
        ON u1.usr_time_nr = u2.usr_time_nr
    SET u1.usr_employment = u2.employment;
    WHERE u1.usr_emplyment = 'Övrigt';
    

    除了您可能正在使用的其他数据库之外,很难跟踪MySQL的更新连接语法。所以有一个 good reference 以防忘记。

    使用main-query来更新,而不是使用main-query来修改别名。除了使其更易于阅读之外,它还解决了您关于对的不明确列引用的一个错误 user_time_nr .现在,当我们使用该列时,很清楚我们指的是哪个表。