【问题标题】:SQL update one table from another tableSQL 从另一张表更新一张表
【发布时间】:2010-12-09 01:40:53
【问题描述】:

这是我的问题的简化版本:

Table 1
Key1, lastdate, lasttranstype

Table2
Table1key1, trandate, trantype

我想要一条 SQL 语句使用 Table2 中具有最新日期的匹配记录来更新 table1 上每个记录的 lastdate 和 lasttransdate

我的数据库正在进步。

这可能吗(我当然可以写一个程序来做,但我宁愿只用一条 SQL 语句来做)?

【问题讨论】:

    标签: sql sql-update openedge progress-db


    【解决方案1】:

    在 T-SQL 中:

    UPDATE Table1 
    SET lastdate = trandate, lasttranstype = trantype
    FROM Table1 INNER JOIN Table2 ON Table1.Key1 = Table2.Table1Key1
    

    编辑: 我不知道 Progress 是 RDBMS 的名称。以下内容对您有用吗?

    UPDATE Table1
    SET lastdate = 
    (SELECT trandate FROM Table2 WHERE Table2.Table1Key1 = Table1.Key1),
    lasttranstype = 
    (SELECT trantype FROM Table2 WHERE Table2.Table1Key1 = Table1.Key1)
    

    【讨论】:

    • AFAIK,使用 JOIN 进行更新仅适用于 T-SQL。这绝对不是 ANSI SQL。
    【解决方案2】:
    update table1, table2 
    set table1.lastdate = table2.trandate, table1.lasttranstype = table2.trantype 
    where table1.key1 = table2.table1key1
    

    【讨论】:

    • 不幸的是,Progress 不允许在更新语句中有两个表。我也尝试过更新表集 ( , , ,) = (Select ...) 但无法找到一种方法让每一行只更新一行
    猜你喜欢
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多