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