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

  • 問題

  • 我有2個TABLE

    TABLE A  有N個列 N個欄

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

    95823    StrSheet_TalkBox_id_9630        WW      2019/05/02

    95824    StrSheet_TalkBox_id_9631    XX    2019/05/02

    95825    StrSheet_TalkBox_id_9632                             2019/05/02

    TABLE B  跟TABLE A 是相同表單

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

    95823    StrSheet_TalkBox_id_9630                     2019/05/02

    95824    StrSheet_TalkBox_id_9631       YY    2019/05/02

    95825    StrSheet_TalkBox_id_9632          ZZ    2019/05/02

                              

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

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

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

    95823    StrSheet_TalkBox_id_9630         WW      2019/05/02

    95824    StrSheet_TalkBox_id_9631       XX    2019/05/02

    95825    StrSheet_TalkBox_id_9632          ZZ    2019/05/02

    請問有辦法可以在SQL內這樣合併嗎 ?

    謝謝 !

    2019年5月1日 下午 08:29

所有回覆

  • 您可以參考這篇討論的做法:

    SQL UPDATE, but only if the old value is null

    再加上篩選處理:

    where english is null

    2019年5月2日 上午 12:55
  • 不好意思再請教您一個問題

    我使用的是DB Browser , 副檔名是sqlite3

    我用了您提供的方法

    使用語法為:

    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

    2019年5月6日 上午 08:19
  • 2019年5月6日 上午 10:45
  • 不管我使用

    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月6日 下午 12:20