Mysql
 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)

संपादित करें:

ओपी अनुरोध के अनुसार, बाद के काम के लिए डुप्लिकेट को ध्वजांकित करने के लिए एक कॉलम है, जैसा कि एक चुनिंदा कथन के विपरीत है। ध्यान दें कि आप Alter Table और इस अशक्त ध्वज स्तंभ को जोड़ें, इसे सेट करें, अपने अवकाश पर मूल्यों का उपयोग करें, बाद में 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. फ़ंक्शन को पीडीओ में बदलें

  2. क्या यह MySQL तालिकाओं को latin1 से utf-8 में बदलने का एक सुरक्षित तरीका है?

  3. xampp स्थापित करने के बाद अपाचे चलाने में त्रुटि

  4. एक बहु किरायेदार mysql डेटाबेस कैसे डिज़ाइन करें

  5. mysql में नेस्टेड सेट से निपटना?