【问题标题】:Updating data using a SELECT query (with two related tables)使用 SELECT 查询更新数据(有两个相关表)
【发布时间】:2014-07-13 14:03:24
【问题描述】:

我一直在尝试更新 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),认为我可以在其上创建一个更新查询 - 但我也无法让它工作。语法如下:

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

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

【问题讨论】:

    标签: mysql sql sql-server


    【解决方案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
    

    【讨论】:

    • 感谢 Raheel - 但我一直遇到同样的错误,“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 'UPDATE table_a 附近使用的正确语法a "新行" INNER_JOIN table_b b ON a.item_to_match = b.item_to_match "新行" S' 在第 5 行
    【解决方案2】:

    您无需说明要更新哪个表,这在您的 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 子句。
    请参考this SO 中提出的问题。

    【讨论】:

    • 我尝试了一个稍微改动过的版本(和你的一样),但在尝试保存时收到以下消息。- 对象引用未设置为对象的实例。
    • 我认为是我.....我刚刚编写了以下查询“UPDATE table_a SET new_value = 'fred'”,当我尝试保存它时它给了我同样的错误(作为看法)。我在 .NET 中使用 DevArt Fusion。
    • 所以这可能是您的查询特定问题,而不是语法问题。
    • 它可能是(但至少我对 UPDATE 查询有了一个非常好的概述......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多