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

时间:2014-05-24 07:13:41

标签: 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_a中使用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

语法是否正确....我在应用程序本身做错了吗?

2 个答案:

答案 0 :(得分:1)

以下是如何做到这一点

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

答案 1 :(得分:0)

您不需要说明您在SET条款中隐含的更新哪些表格。

UPDATE tableA a
JOIN tableB b
   ON a.a_id = b.a_id
JOIN tableC c
   ON b.b_id = c.b_id
SET b.val = a.val+c.val
WHERE a.val > 10
    AND c.val > 10;

没有FROM条款。
请参阅SO中提出的this问题。