mysql - 使用连接表进行 sql 更新

标签 mysql sql-update

假设我有这个选择语句:

SELECT ut.user_id,
       a.firstname,
       a.surname,
       u.username,
       u.email_address
  FROM administrators a 
  JOIN user_types ut JOIN users u ON a.admin_id = ut.type_id 
   AND u.user_id = ut.user_id AND ut.user_type = 'ADMIN';

假设我想更新 user_id = 1 行中的所有值;

我可以单独更新每个表,或者我可以创建一个像这样的 View :

CREATE OR REPLACE VIEW full_admin AS
SELECT ut.user_id,
       a.firstname,
       a.surname,
       u.username,
       u.email_address
  FROM administrators a 
  JOIN user_types ut 
  JOIN users u  on a.admin_id = ut.type_id 
   AND u.user_id = ut.user_id 
   AND ut.user_type = 'ADMIN'

然后我可以写:

UPDATE full_admin
   SET firstname = 'blah', etc, etc
 WHERE user_id = 1;

这将更新所有表中的所有行

有没有办法在不创建 View 的情况下做到这一点?

类似于:

UPDATE (
    SELECT ut.user_id,
           a.firstname,
           a.surname,
           u.username,
           u.email_address
      FROM administrators a 
      JOIN user_types ut 
      JOIN users u ON a.admin_id = ut.type_id 
       AND u.user_id = ut.user_id 
       AND ut.user_type = 'ADMIN'
)
AS temp_table
  SET firstname = "ALEX"
WHERE user_id = 1;

但是这不起作用

最佳答案

如果你想update columns in both管理员和用户同时,那么类似这样的事情应该可以解决问题:

UPDATE administrators a  
        INNER JOIN user_types ut ON a.admin_id = ut.type_id 
        INNER JOIN users u ON u.user_id = ut.user_id 
            SET u.firstname = "ALEX", a.SomeColumn = 'X' 
        WHERE u.user_id = 1 
                 AND ut.user_type = 'ADMIN' 

SET 语句部分可以作用于连接中的任何列。

(如果这就是您要问的!)

关于mysql - 使用连接表进行 sql 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9193980/

相关文章:

带有分组依据的子查询的 MySQL UPDATE

Oracle 更新并返回值

mysql - 查询是否可以改进,因为它会出现超时异常

mysql - 数据采集​​用什么数据库?

php - MySQL/PHP : Select file extension types simple query?

PHP 变量返回空值

Mysql查询5张表

php - 如何在使用 PHP 更新查询的帮助下添加相同的值?

php - 通过 PHP 更新 MySQL

java.lang.ClassNotFoundException : com. mysql.jdbc.Driver 异常