mysql - 如果记录不存在于另一个表中,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 中遇到语法错误。
解决方案
正确的 MySQL 语法是:
UPDATE customers c LEFT JOIN
invoices i
ON i.customer_id = c.id
SET active = 0
WHERE i.customer_id IS NULL;
JOIN
in an的使用UPDATE
是特定于数据库的。例如,MySQL 不支持FROM
an 中的子句UPDATE
(SQL Server 和 Postgres 支持)。
应该适用于任何数据库的标准语法是:
UPDATE customers
SET active = 0
WHERE NOT EXISTS (SELECT 1 FROM invoices i WHERE i.customer_id = customers.id);
推荐阅读
- android - 如何修复滚动不顺畅的 Recyclerview?
- node.js - 如何更改节点js中url的路径名
- mongodb - 如果一个条件为真,Mongo 匹配返回所有数据
- kotlin - 有人可以解释一下以下“Kotlin Literal high order function”的实现吗?
- python - 替换出现在 odoo 12 中的其他地方的表单视图
- html - 表数据加载后显示时间
- java - 如何拦截 Tess4J 的输出并将其放入日志文件中?
- javascript - javascript - 为什么地图返回空数组?
- python - shell 脚本如何从自身内部执行另一个 shell 脚本
- asp.net-core - 如果请求参数标头是 json 格式的 applicationx-www-form-urlencoded 我如何读取它 asp.net 核心