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

MYSQLは、ユーザー名と日付のペアが複数回出現するすべてのレコードを選択します

    create table table1
    (
        id int auto_increment primary key,
        username varchar(30) not null,
        `date` date not null
    );
    
    insert table1 (username,`date`) values ('john','2015-01-01');
    insert table1 (username,`date`) values ('kim','2015-01-01');
    insert table1 (username,`date`) values ('john','2015-01-01');
    insert table1 (username,`date`) values ('john','2015-02-01');
    insert table1 (username,`date`) values ('john','2015-03-01');
    
    SELECT t1.* 
    from table1 t1
    join
    (
        select username,`date`,count(*)
        from table1
        group by username,`date`
        having count(username)>1
    ) inr
    on inr.username=t1.username and inr.`date`=t1.`date`
    

    2行表示されます

    +----+----------+------------+
    | id | username | date       |
    +----+----------+------------+
    |  1 | john     | 2015-01-01 |
    |  3 | john     | 2015-01-01 |
    +----+----------+------------+
    2 rows in set (0.03 sec)
    

    編集:

    OPリクエストに従って、selectステートメントではなく、後の作業のために重複にフラグを立てる列を用意します。 Alter Tableができることに注意してください このnull許容フラグ列を追加して設定し、自由に値を使用して、後でAlter Table ドロップします。

    ただし、ここから始めて、新しいフラグ列を含むテーブルを作成します。

    create table table1
    (
        id int auto_increment primary key,
        username varchar(30) not null,
        `date` date not null,
        dupeflag int null --    <---- New flag column, nullable, ignored on inserts below
    );
    
    insert table1 (username,`date`) values ('john','2015-01-01');
    insert table1 (username,`date`) values ('kim','2015-01-01');
    insert table1 (username,`date`) values ('john','2015-01-01');
    insert table1 (username,`date`) values ('john','2015-02-01');
    insert table1 (username,`date`) values ('john','2015-03-01');
    
    update table1 t1
    join 
    (   select username,`date`,count(*)
        from table1
        group by username,`date`
        having count(username)>1
    ) inr
    on inr.username=t1.username and inr.`date`=t1.`date`
    set dupeflag=1;
    
    -- 2 rows affected
    
    select * from table1;
    
    +----+----------+------------+----------+
    | id | username | date       | dupeflag |
    +----+----------+------------+----------+
    |  1 | john     | 2015-01-01 |        1 |
    |  2 | kim      | 2015-01-01 |     NULL |
    |  3 | john     | 2015-01-01 |        1 |
    |  4 | john     | 2015-02-01 |     NULL |
    |  5 | john     | 2015-03-01 |     NULL |
    +----+----------+------------+----------+
    5 rows in set (0.00 sec)
    



    1. ツリーのアイテム数のクエリ

    2. MySQLの区切り文字

    3. BIT(1)のストレージサイズはどれくらいですか?

    4. Hibernateを使用してMySQLにバイト配列を格納する