首页 > 解决方案 > MYSQL 根据表 2 的列值更新表 1 列

问题描述

基于另一个表的 col 条件的基本 SQL 更新:

UPDATE table_1 
   SET col_value = '0' 
 WHERE tbl2_col_val IN 
        (SELECT tbl2_col_val 
           FROM table_2 
          WHERE tbl2_col_val = 'whatever')

我得到的错误是:

#1054 - 'IN/ALL/ANY 子查询'中的未知列 'tbl2_col_val'

我到处都在寻找同样的逻辑,但它不起作用。这是我相信的第一个 WHERE 子句之后的问题。 这是我的资源之一……看起来很简单!

编辑:

WordPress 数据库。大量帖子被导入到新版本中,该主题对所有帖子都有一个自定义选项(复选框)。导入的帖子没有选择选项并添加meta_value。如果我选中该框,那么该帖子才会获得 1 的 meta_value,未选中将该值设置为 0。它基本上只是一个枚举。我有超过 1400 个帖子,有些需要检查,有些需要取消检查。我能够运行一个在functions.php中自动检查所有这些的函数,现在我需要在数据库中运行一个SQL更新来自动取消选中其他的。这就是使用 WP DB 表查询的样子。

UPDATE wp_postmeta SET meta_value = '0' WHERE term_taxonomy_id IN (SELECT term_taxonomy_id FROM wp_term_relationships WHERE term_taxonomy_id = '993')

标签: mysqlsqlsql-update

解决方案


UPDATE table1 t1
JOIN table_2  t2 ON 
t2.tbl2_col_val IN (SELECT t2.tbl2_col_val FROM table_2 WHERE t2.tbl2_col_val = 'whatever')
SET t1.col_value = '0';

希望这对您有所帮助。


推荐阅读