mysql - 使用 MySQL 从一个表更新另一个表时如何处理 NULL

标签 mysql sql-update

我有以下代码,但它会更新 table_1 中的所有行,即使条件不为真(即 table_1.data_1 根本不存在)在 table_2.data_1 中)。如何调整以下更新语句,以便仅更新 table_1 中与 table_2 中的值匹配的值?

我正在尝试将 table_1.data_2 中的所有值设置为 NULL,其中两个表中的 data_1 值相同。

UPDATE table_1.data_1, table_2.data_1
SET table_1.data_2 = NULL
WHERE table_1.data_1 = table_2.data_1

这是对我原来的帖子的更新。

UPDATE table_1.data_2
SET table_1.data_2 = NULL
WHERE table_1.data_1 IN
(SELECT table_2.data_1 FROM table_2 WHERE table_1.data_1 = table_2.data_1);

最佳答案

我还没有测试过这个,但认为这样的东西会起作用:

UPDATE table_1 SET data_2 = NULL 
  WHERE data_1 IN(SELECT table_1.data_1 
  FROM table_1, table_2 
  WHERE table_1.data_1 = table_2.data_1)

喜欢这个资源,因为当我需要关于如何处理某事的不同想法时: http://www.artfulsoftware.com/infotree/queries.php

更新:

UPDATE table_1
LEFT JOIN table_2 
ON table_1.data_1 = table_2.data_1 AND table_1.data_1 IS NOT NULL
SET table_1.data_2 = NULL;

关于mysql - 使用 MySQL 从一个表更新另一个表时如何处理 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786372/

相关文章:

PHP/MYSQL IP 检查/记录器

SQL 根据前几行填空数据

MySQL:仅在满足条件时更新字段

sql - oracle 更新关联查询

mysql - 如何提高 MYSQL 在 UNION ALL 上的性能?

mysql - SQL 选择消除在下一列中有 2 个其他值的重复值

php - 关键字 mysql 搜索返回不准确的结果

sql - 在另一个表 SQL Server 2008 中使用来自 SELECT 的 UPDATE 语句覆盖 ID 值

sql - 在 Postgres 中使用带有聚合和分组的子查询进行更新

php - 来自数据库的淡入内容被一些 php 抓取