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 列的主要内容,如果未能解决你的问题,请参考以下文章