none
SQL不同TABLE相同列之合併,且不會覆蓋原有資料的方法 RRS feed

  • 問題

  • 我使用DB Browser 副檔名為sqlite3

    我有2個TABLE

    TABLE A  有N個列 N個欄

    內容資料  : 
    (編號)    (ID)              (korean)(english)                (日期)        

    95823    StrSheet_TalkBox_id_9630     출석      check in       2019/05/02

    95824    StrSheet_TalkBox_id_9631  요리학   cooking         2019/05/02

    95825    StrSheet_TalkBox_id_9632     펠디그               2019/05/02

    TABLE B  跟TABLE A 是相同表單

    (編號)    (ID)              (korean)(english)                (日期)        

    95823    StrSheet_TalkBox_id_9630     출석      check in       2019/05/02

    95824    StrSheet_TalkBox_id_9631  삼나무   cook               2019/05/02

    95825    StrSheet_TalkBox_id_9632     펠디그   Feldigg        2019/05/02

                              

    我想將TABLE B 加入TABLE A 合併,

    並且,在TABLE B 的某欄資料遇到TABLE A 某欄已經有資料時不套用或覆蓋 .產生的內容如下:

    (編號)    (ID)              (korean)(english)                (日期)        

    95823    StrSheet_TalkBox_id_9630     출석      check in       2019/05/02

    95824    StrSheet_TalkBox_id_9631  삼나무   cooking         2019/05/02

    95825    StrSheet_TalkBox_id_9632     펠디그   Feldigg        2019/05/02



    如果使用:

    update Strings
    set english = coalesce (english,NULL)
    from Strings
    where english is NULL

    會出現以下錯誤訊息:

    Result: near "from": syntax error
    At line 1:
    update Strings
    set english = coalesce (english,NULL)
    from

    或是使用以下語法皆不會套用:

    UPDATE Strings
    SET english = (SELECT english
                  FROM Strings
                  WHERE (Strings.english = Strings.english))
    WHERE EXISTS (SELECT english
                  FROM Strings
                  WHERE (Strings.english = Strings.english));
    UPDATE strings
    SET english =
        (SELECT english
         FROM strings_2
         WHERE (strings.english) = (strings_2.english))
    WHERE (english) IN (SELECT english FROM strings_2);

    甚至使用:

    UPDATE strings
    SET korean =
        (SELECT  korean
         FROM strings_2
         WHERE (strings.english) = (strings_2.english))
    WHERE (english) IN (SELECT english FROM strings_2);

    會將korean那一列都變成同一個數值。

    以上方法皆無法達到我想要的效果,想問是哪裡出問題了?

    2019年5月20日 下午 12:25

所有回覆

  • 你可以試著使用UPDATE 和 OUTER JOIN 基於TableA 搭配 coalesce 方法

    UPDATE a SET a.english = coalesce(a.english,b.english) FROM TABLEA a LEFT JOIN TABLEB b ON a.ROWID = b.ROWID WHERE a.english IS NULL

    [Results][2] | ROWID | ID | korean | english | DATE | |-------|--------------------------|--------|----------|------------| | 95823 | StrSheet_TalkBox_id_9630 | 출석 | check in | 2019-05-02 | | 95824 | StrSheet_TalkBox_id_9631 | 요리학 | cooking | 2019-05-02 | | 95825 | StrSheet_TalkBox_id_9632 | 펠디그 | Feldigg | 2019-05-02 |







    2019年5月22日 上午 03:01