sql >> データベース >  >> RDS >> PostgreSQL

SQL:大文字と小文字を区別しない重複をマージする方法

    SQLフィドル

    これがあなたのアップデートです:

     UPDATE stats
     SET totalgames = x.games, wins = x.wins
     FROM (SELECT LOWER(nick) AS nick, SUM(totalgames) AS games, SUM(wins) AS wins
         FROM stats
          GROUP BY LOWER(nick) ) AS x
     WHERE LOWER(stats.nick) = x.nick;
    

    重複する行を吹き飛ばすための削除は次のとおりです。

     DELETE FROM stats USING stats s2
     WHERE lower(stats.nick) = lower(s2.nick) AND stats.nick < s2.nick;
    

    (「update...from」および「delete...using」構文はPostgres固有であり、この回答 およびこの回答 。)

    これを実行して、すべての名前を小文字にすることもできます:

     UPDATE STATS SET nick = lower(nick);
    

    Aaaandは、小文字バージョンの「nick」に一意のインデックスを挿入します(または、その列に制約を追加して、小文字以外の値を禁止します):

    CREATE UNIQUE INDEX ON stats (LOWER(nick)); 
    


    1. タイムスタンプNOTNULLDEFAULT CURRENT_TIMESTAMPは、あるマシンではnullにできますが、別のマシンではnullにできませんか?

    2. 解析エラー:構文エラー、予期しない'mysql_query'(T_STRING)in

    3. SQLのビューを理解する

    4. SQLiteで数値にパーセント記号を追加する2つの方法