mysql update + ( where + join) 语法

Posted

技术标签:

【中文标题】mysql update + ( where + join) 语法【英文标题】:mysql update + ( where + join) syntax 【发布时间】:2012-08-26 00:24:46 【问题描述】:
    $rs = mysql_query("
        SELECT a.id 
        FROM a
        JOIN b ON b.id=a.id
        WHERE 
            b.p1=1 AND 
            a.p1=1");

    while($r = mysql_fetch_assoc($rs))
        $ids[] = $r['id'];

    $rs = mysql_query("
        UPDATE a
        SET p2=2 
        WHERE id IN (".implode(",",$ids).")");

如何在一个查询中做到这一点?

【问题讨论】:

【参考方案1】:
UPDATE a
JOIN   b ON a.id=b.id AND a.p1 = 1 AND b.p1 = 1
SET    a.p2 = 2

【讨论】:

【参考方案2】:

您可以使用比IN 子句执行得更好的INNER JOIN 来做到这一点:

UPDATE a
       INNER JOIN b
           ON b.id=a.id
              AND b.p1 = 1
              AND a.p1 = 1
SET p2 = 2;

【讨论】:

【参考方案3】:
UPDATE a
SET p2=2 
WHERE id IN (SELECT a.id 
        FROM a
        JOIN b ON b.id=a.id
        WHERE 
            b.p1=1 AND 
            a.p1=1)

【讨论】:

您无法更新子查询中使用的同一张表from

以上是关于mysql update + ( where + join) 语法的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误代码:在带有 WHERE 子句的 UPDATE 期间出现 1175

在MySQL中阻止UPDATE语句没有添加WHERE条件的发生

怎么撤回MySQL中“update user set host ='%' where user ='root'”的操作,恢复到默认值权限

MYSQL UPDATE SET 在同一列但有多个 WHERE 子句

优化包含 WHERE 和 ORDER BY 的 MySQL UPDATE 查询?

Node.js mysql 查询语法问题 UPDATE WHERE