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

姓名から一意のユーザー名を生成しますか?

    CREATE TABLE bar LIKE foo;
    
    INSERT INTO bar (id,user,first,last)
    (SELECT f.id,CONCAT(SUBSTRING(f.first,1,1),f.last,
         (SELECT COUNT(*) FROM foo f2
             WHERE SUBSTRING(f2.first,1,1) = SUBSTRING(f.first,1,1)
                   AND f2.last = f.last AND f2.id <= f.id
             )),f.first,f.last from foo f);
    
    DROP TABLE foo;
    RENAME TABLE bar TO foo;
    

    これは主キーidに依存しています 、したがって、barに挿入されたレコードごとに 、fooで見つかった重複のみをカウントします idを使用 bar.id未満 。

    与えられたfoo:

    select * from foo;
    +----+------+--------+--------+
    | id | user | first  | last   |
    +----+------+--------+--------+
    |  1 | aaa  | Roger  | Hill   | 
    |  2 | bbb  | Sally  | Road   | 
    |  3 | ccc  | Fred   | Mount  | 
    |  4 | ddd  | Darren | Meadow | 
    |  5 | eee  | Sharon | Road   | 
    +----+------+--------+--------+
    

    上記のINSERT sをbarに 、結果:

    select * from bar;
    +----+----------+--------+--------+
    | id | user     | first  | last   |
    +----+----------+--------+--------+
    |  1 | RHill1   | Roger  | Hill   | 
    |  2 | SRoad1   | Sally  | Road   | 
    |  3 | FMount1  | Fred   | Mount  | 
    |  4 | DMeadow1 | Darren | Meadow | 
    |  5 | SRoad2   | Sharon | Road   | 
    +----+----------+--------+--------+
    

    ユーザー名の末尾から「1」を削除するには、

    INSERT INTO bar (id,user,first,last)
    (SELECT f3.id,
            CONCAT(
                SUBSTRING(f3.first,1,1),
                f3.last,
                CASE f3.cnt WHEN 1 THEN '' ELSE f3.cnt END),
            f3.first,
            f3.last
     FROM (
        SELECT
            f.id,
            f.first,
            f.last,
            (
                SELECT COUNT(*) 
                FROM foo f2
                WHERE SUBSTRING(f2.first,1,1) = SUBSTRING(f.first,1,1)
                AND f2.last = f.last AND f2.id <= f.id
            ) as cnt
        FROM foo f) f3)
    


    1. JOINを使用する場合のWHERE句とON

    2. ヒストグラムプロットのデータを取得する

    3. SQL-階層を保存してナビゲートする方法は?

    4. MySQLREPLACEINTOのSQLServer2005実装?