我一直在尝试更新SELECT查询背后的数据,但没有走得太远,所以我创建了一个新的数据库,希望能找到解决方案。
我有两张桌子:
table_a
和table_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
语法是否正确....我在应用程序本身做错了吗?
答案 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问题。