Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MYSQL chọn tất cả các bản ghi mà cặp tên người dùng và ngày xuất hiện nhiều lần

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`

kết quả trong 2 hàng được hiển thị

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

Chỉnh sửa:

theo yêu cầu OP, có một cột để gắn cờ lừa đảo cho công việc sau này, trái ngược với câu lệnh select. Lưu ý rằng bạn có thể Alter Table và thêm cột cờ vô hiệu này, đặt nó, sử dụng các giá trị khi bạn rảnh rỗi, sau này Alter Table và thả nó xuống.

Nhưng tôi sẽ chỉ bắt đầu lại ở đây với bảng tạo với cột cờ mới:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách kết hợp các bảng có mối quan hệ từ 1 đến nhiều thành 1 dòng bản ghi

  2. PHP Lưu phiên trong cơ sở dữ liệu. Phương pháp đọc dường như không hoạt động

  3. Đạt được Dự phòng &Dự phòng MySQL trên Google Cloud Platform (GCP)

  4. Cách dễ nhất để xác định xem người dùng có trực tuyến không? (PHP / MYSQL)

  5. Tôi nên sử dụng thư viện python 3 nào cho MySQL?