【问题标题】:How to overwrite table-rows with data from other table如何用其他表中的数据覆盖表行
【发布时间】:2015-08-25 14:19:58
【问题描述】:

我想用 table2 中的其他行覆盖同一数据库中的行。

例如table1有如下数据:

COL1 | Col2  | Col3  | Col4  | Col5  | idDie
----------------------------------------------
0001 | unknown | unknown | unknown | unknown | frKey1
0002 | unknown | unknown | unknown | unknown | frKey2
0003 | unknown | unknown | unknown | unknown | frKey3
0004 | unknown | unknown | unknown | unknown | frKey4
0005 | unknown | unknown | unknown | unknown | frKey5
0006 | unknown | unknown | unknown | unknown | frKey6

和表2:

COL1 | Col4  | Col5 | Col6 | Col7
---------------------------------
0003 | value | value | value | value
0004 | value | value | value | value
0005 | value | value | value | value

所以我想用表 2 中的数据覆盖表 1 中的默认数据(表 2 具有相同的列名,但并非所有列都与表 1 相同!只有几列)在 COL1 > 0002 和 COL1

还有另外一个table3,格式如下:

idDie | Col22 | Col33 | Col44


frKey1 |未知 |未知 |未知 frKey2 |未知 |未知 |未知 frKey3 |未知 |未知 |未知 frKey4 |未知 |未知 |未知 frKey5 |未知 |未知 |未知 frKey6 |未知 |未知 |未知

id 为 frKey3、frKey3 和 frKey4 的模具也应该被覆盖。它们在table1中有一个引用,外键,table2中的Col6和Col7信息是应该复制到table3的信息。

是否可以仅在一个 sql 语句中做到这一点?

【问题讨论】:

    标签: sql sql-server tsql sql-update


    【解决方案1】:

    对于 SQL Server,您想要的更新查询是:

    update t1
    set
      t1.col4 = t2.col4,
      t1.col5 = t2.col5
    from table1 t1
    join table2 t2 on t1.col1 = t2.col1;
    

    鉴于您的示例数据 Table1 在更新后将如下所示:

    COL1        Col2    Col3    Col4    Col5
    ----------- ------- ------- ------- -------
    1           unknown unknown unknown unknown
    2           unknown unknown unknown unknown
    3           unknown unknown value   value
    4           unknown unknown value   value
    5           unknown unknown value   value
    6           unknown unknown unknown unknown
    

    【讨论】:

    • 我在 set-statement 上的每一列都收到此错误,尽管数据库中存在表和所有列 --> "多部分标识符 "dbo.xxx$.col4" 可能不受约束。”
    • @ZelelB 你有没有像我一样为表格使用别名?用于列的前缀必须与用于表的别名匹配(如果有)。
    • 我编辑了这个问题。你有解决方案吗?是否有可能在一个 sql 语句中完成所有这些操作?
    • 有什么想法可以实现吗? (用table3编辑后)
    • @ZelelB 不能在同一个更新语句中指定多个表作为目标。您必须使用多个语句。有关更多信息,请参阅此问题:stackoverflow.com/questions/2044467/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2022-01-26
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多