MYSQL 根据表 2 的列值更新表 1 列

Posted

技术标签:

【中文标题】MYSQL 根据表 2 的列值更新表 1 列【英文标题】:MYSQL Update Table 1 Column Based On Table 2's Column Value 【发布时间】:2020-07-29 03:26:05 【问题描述】:

基于另一个表的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 子句之后的问题。 Here's one of my resources...seems pretty straight forward!

编辑:

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')

【问题讨论】:

请发布两个表的定义。 ...并将表别名添加到使用的每个列名。 【参考方案1】:
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';

希望这对你有帮助。

【讨论】:

不幸的是,将 t1.col_value 中的所有值更新为 0。 您必须保持关系条件,否则它会全部更新。例如 t1.pk_colname = t2.fk_col_name

以上是关于MYSQL 根据表 2 的列值更新表 1 列的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 根据联接表列值更新列值

如何有条件的更新sql 数据表中的列值?

根据oracle中的列值加入表

用另一个表中的列值替换列的空值

MySQL索引简介

根据列值将一行拆分为多行