【问题标题】:SQL Update a table using a viewSQL 使用视图更新表
【发布时间】:2013-11-12 20:54:58
【问题描述】:

我有以下 SQL 代码:

SELECT
    `table1`.`field1`
    , `view1`.`newfield1`
FROM
    `table1`
INNER JOIN `GCOTDA2`.`view1` 
        ON (`table1`.`id1` = `view1`.`id1`) AND (`table1`.`id2` = `view1`.`id2`);

查询工作正常,但现在我想将 view1.newfield1 复制到 table1.field1。因此,我写了以下声明:

UPDATE `table1`
SET
    `table1`.`field1` = `view1`.`newfield1`
FROM
    `table1`
INNER JOIN `view1` 
        ON (`table1`.`id1` = `view1`.`id1`) AND (`table1`.`id2` = `view1`.`id2`);

但是,更新不起作用,我收到以下错误消息:

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM
    `table1`
    INNER JOIN `view1` 
 ' at line 4

我在这个网站上查看了谷歌和其他问题,例如:How do I UPDATE from a SELECT in SQL Server?Error Code: 1064 in mysql,但没有运气。 (MySQL 服务器 5.5.27) 我需要有人来照亮我,谢谢!

【问题讨论】:

    标签: mysql sql sql-update sql-view


    【解决方案1】:

    试穿一下尺寸:

    UPDATE 'table1` t JOIN `view1` v 
    ON      t.id1 = v.id1 AND t.id2 = v.id2
    SET     t.field1 = v.newfield1
    

    【讨论】:

    • 谢谢!它有效,但你能解释一下为什么我的代码没有?再次感谢!
    【解决方案2】:

    您可以使用子查询来做到这一点:

    update 
        table1
    set
        table1.field1 = (select view1.newfield1 from view1 where view1.id1 = table1.id1 and view1.id2 = table1.id2)
    where
        exists (select null from view1 where view1.id1 = table1.id1 and view1.id2 = table1.id2)
    

    http://sqlfiddle.com/#!2/64774/1/0

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多