mysql - 使用 SELECT 查询更新数据(有两个相关表)

标签 mysql sql sql-server

我一直在尝试更新 SELECT 查询背后的数据,但没有做得太过分,所以我创建了一个新数据库,希望找到解决方案。

我有两个表:

table_atable_b

table_a:
ID, item_to_match, new_value *(this is initially blank)*

table_b:
IDB, item_to_match, new_value *(the value I want to get into table_a)*

不知何故,我想用来自 table_b 的 new_value 更新 table_a 中的 new_value - 但我似乎无法得到它(我是新手)。

我尝试创建一个 UPDATE 查询,但这只允许我显示两个表之一。所以我尝试创建一个主查询(称为 main),认为我可以在其上创建一个 UPDATE 查询 - 但我也无法让它工作。语法如下:

SELECT
    `table_a`.`new_value` AS `goingto`,
    `table_b`.`new_value` AS `takenfrom`
FROM (`table_a`
    JOIN `table_b`
        ON ((`table_a`.`item_to_match` = `table_b`.`item_to_match`)))

我真的非常希望能就如何执行此操作提供更多指导(抱歉一直问)。


我现在已经尝试了三种变体,但一直收到相同的错误消息。但这里有一些变化:

UPDATE table_a, table_b
SET table_a.new_value = table_b.new_value
WHERE table_a.item_to_match = table_b.item_to_match

UPDATE table_a a
INNER JOIN table_b b ON a.item_to_match = b.item_to_match
SET a.new_value = b.new_value

UPDATE table_a a,table_b b
SET a.new_value = b.new_value
WHERE a.item_to_match = b.item_to_match

item_to_match 字段不是主键或索引 (FYI)...

我到底做错了什么???

我也刚试过:

 UPDATE table_a a
    JOIN table_b b
    ON a.item_to_match = b.item_to_match
    SET a.new_value = b.new_value

语法是否正确……我是不是在应用程序本身做错了什么?

最佳答案

这是你可以做到的

UPDATE table_a AS a
INNER JOIN table_b AS b ON a.item_to_match = b.item_to_match
SET a.new_value = b.new_value

关于mysql - 使用 SELECT 查询更新数据(有两个相关表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23842313/

相关文章:

php - 连接到 MySQL DB 时不返回错误消息

mysql - 在 mySql 中以 %W %M %d %Y 格式排序日期

MySQL避免重复值

mysql - mysql 循环中的语法错误。数据库

.net - 如何从/向 SQL Server BLOB 字段传输数据?

php - CentOS 7上通过PHP连接远程SQL Server

SQL TOP 5000 比结果行数少于 5000 的普通查询快?

php - 检查已经进行的查询以获取不同的字段值,但不进行其他查询

c++ - SQL根据一个表中的行而不是另一个表中的行更新和连接三个表

sql - 有没有一种简单的方法使用 sql server/TSQL 进行十六进制算术?