首页 > 解决方案 > 如果记录不存在于另一个表中,SQL 更新一个表

问题描述

SELECT c.*
FROM customers c LEFT JOIN
     invoices i
     ON i.customer_id = c.id
WHERE i.customer_id IS NULL

以上可以给我所有没有发票的客户帐户。运行需要很长时间,但我不关心速度。我可能每年只运行几次。

当帐户没有发票时,我无法正确更新客户表中的记录。我尝试了多种不同的方法来完成此操作,但总是出现语法错误。

下面是一种尝试...

UPDATE c
    SET active=0
    FROM customers c LEFT JOIN
         invoices i
         ON i.customer_id = c.id
    WHERE i.customer_id IS NULL

当我尝试运行它时,我在 Join 中遇到语法错误。

标签: mysqlsql

解决方案


正确的 MySQL 语法是:

UPDATE customers c LEFT JOIN
       invoices i
       ON i.customer_id = c.id
    SET active = 0  
WHERE i.customer_id IS NULL;

JOINin an的使用UPDATE是特定于数据库的。例如,MySQL 不支持FROMan 中的子句UPDATE(SQL Server 和 Postgres 支持)。

应该适用于任何数据库的标准语法是:

UPDATE customers
    SET active = 0
    WHERE NOT EXISTS (SELECT 1 FROM invoices i WHERE i.customer_id = customers.id);

推荐阅读