zoukankan      html  css  js  c++  java
  • How to update multiple columns of one table using values from another table?

    A common, standard SQL way of doing this is:
    UPDATE dest_table t1
    SET 
    field1 = (select field1 from src_table t2 where t2.pk = t1.pk),
    field2 = (select field2 from src_table t2 where t2.pk = t1.pk),
    ...etc.
    WHERE EXISTS (select 1 from src_table t2 where t2.pk = t1.pk)
    If you are using Firebird 2, you can use EXECUTE BLOCK to write a more effective statement:
    EXECUTE BLOCK
    AS
    DECLARE VARIABLE field1 type;
    DECLARE VARIABLE field2 type;
    ...etc.
    DECLARE VARIABLE pk type;
    BEGIN
    for select pk, field1, field2, ... from src_table
    into :pk, :field1, :field2, ...
    do update dest_table set field1 = :field1, field2 = :field2, ...
    where pk = :pk;
    END
    If you are using Firebird 1.x, you could write a stored procedure to do the job.
    Beside direct SQL you can use some tool like FBExport that allows you to have better error handling (it's easier to detect the exact row and column that fails to update). Here's FBExport example, first export data to a file:
    fbexport -S -Q "select pk, field1, field2, ... from src_table" -F test.fbx
    Then, import into the other table:
    fbexport -If -Q "update dest_table set field1 = :2, field2 = :3, ... where pk = :1" -F test.fbx
    FBExport is an open source tool. The download for latest version is here:
    http://www.firebirdfaq.org/fbexport.php
  • 相关阅读:
    vs快速添加引用解析的快捷键
    Linux内核调试技术——kprobe使用与实现
    Linux内核调试技术——kretprobe使用与实现
    Linux内核调试技术——jprobe使用与实现
    【HTTP协议】---HTTP协议详解
    雪崩效应
    Shell中IFS用法
    shell中for循环,读取一整行
    BCD码
    pam模块日志怎么输出
  • 原文地址:https://www.cnblogs.com/top5/p/2236615.html
Copyright © 2011-2022 走看看