如果记录不在另一个表中,则SQL更新一个表

时间:2018-07-30 19:56:01

标签: sql mysqli

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中收到语法错误。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您只是在查询下面犯了些小错误而已

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

答案 1 :(得分:1)

正确的MySQL语法是:

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

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

适用于任何数据库的标准语法为:

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