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

MySQLクエリのみを使用して重複を削除しますか?

    次のテストケースを検討してください。

    CREATE TABLE mytb (url_id int, url_addr varchar(100));
    
    INSERT INTO mytb VALUES (1, 'www.google.com');
    INSERT INTO mytb VALUES (2, 'www.microsoft.com');
    INSERT INTO mytb VALUES (3, 'www.apple.com');
    INSERT INTO mytb VALUES (4, 'www.google.com');
    INSERT INTO mytb VALUES (5, 'www.cnn.com');
    INSERT INTO mytb VALUES (6, 'www.apple.com');
    

    テストテーブルに含まれる場所:

    SELECT * FROM mytb;
    +--------+-------------------+
    | url_id | url_addr          |
    +--------+-------------------+
    |      1 | www.google.com    |
    |      2 | www.microsoft.com |
    |      3 | www.apple.com     |
    |      4 | www.google.com    |
    |      5 | www.cnn.com       |
    |      6 | www.apple.com     |
    +--------+-------------------+
    5 rows in set (0.00 sec)
    

    次に、複数テーブルの DELETE> 構文は次のとおりです:

    DELETE t2
    FROM   mytb t1
    JOIN   mytb t2 ON (t2.url_addr = t1.url_addr AND t2.url_id > t1.url_id);
    

    ...重複するエントリを削除し、 url_idに基づく最初のURLのみを残します :

    SELECT * FROM mytb;
    +--------+-------------------+
    | url_id | url_addr          |
    +--------+-------------------+
    |      1 | www.google.com    |
    |      2 | www.microsoft.com |
    |      3 | www.apple.com     |
    |      5 | www.cnn.com       |
    +--------+-------------------+
    3 rows in set (0.00 sec)
    

    更新 -上記の新しいコメントに加えて:

    重複するURLの形式が同じでない場合は、 REPLACE() www。を削除する関数 またはhttp:// 部品。例:

    DELETE t2
    FROM   mytb t1
    JOIN   mytb t2 ON (REPLACE(t2.url_addr, 'www.', '') = 
                       REPLACE(t1.url_addr, 'www.', '') AND 
                       t2.url_id > t1.url_id);
    


    1. オフラインアプリケーションのバックアップを作成するための最良の方法はありますか?

    2. SQL Serverで外部キーを作成するにはどうすればよいですか?

    3. ユーザーごとに最新の日付の行を選択します

    4. MySQLサーバー接続は暗号化されて安全ですか?