SQL වගුවක අනුපිටපත් අගයන් සොයා ගැනීම


1943

එක් ක්ෂේත්‍රයක් සමඟ අනුපිටපත් සොයා ගැනීම පහසුය:

SELECT name, COUNT(email) 
FROM users
GROUP BY email
HAVING COUNT(email) > 1

ඉතින් අපිට මේසයක් තියෙනවා නම්

ID   NAME   EMAIL
1    John   asd@asd.com
2    Sam    asd@asd.com
3    Tom    asd@asd.com
4    Bob    bob@asd.com
5    Tom    asd@asd.com

මෙම විමසුම අපට ජෝන්, සෑම්, ටොම්, ටොම් ලබා දෙන්නේ ඔවුන් සියල්ලන්ටම එක හා සමාන emailබැවිනි.

කෙසේ වෙතත්, මට අවශ්‍ය වන්නේ එකම email හා අනුපිටපත් ලබා ගැනීමයි name.

එනම්, මට "ටොම්", "ටොම්" ලබා ගැනීමට අවශ්යයි.

මට මෙය අවශ්‍ය හේතුව: මම වැරැද්දක් කළ අතර, අනුපිටපත් nameසහ emailඅගයන් ඇතුළත් කිරීමට ඉඩ දුන්නෙමි . දැන් මට අනුපිටපත් ඉවත් කිරීමට / වෙනස් කිරීමට අවශ්‍යයි, එබැවින් මට පළමුව ඒවා සොයා ගත යුතුය.


29
එය සමස්ත ශ්‍රිතයක නොමැති බැවින් එය ඔබගේ පළමු නියැදියේ නම තෝරා ගැනීමට ඉඩ දෙනු ඇතැයි මම නොසිතමි. "ගැලපෙන ඊමේල් ලිපින ගණන සහ ඒවායේ නම කුමක්ද" යනු සමහර
උපක්‍රමශීලී

3
nameSELECT හි ඇති ක්ෂේත්‍රය නිසා මෙය MSSQL සේවාදායකය සමඟ ක්‍රියා නොකරන බව සොයාගෙන ඇත.
ඊ. වැන් පුටන්

මට අවශ්‍ය වන්නේ අනුපිටපත් සහිත ඊමේල් සහිත වාර්තා වල හැඳුනුම්පතයි
මාකෝස් ඩි පාවුලෝ

Answers:


3051
SELECT
    name, email, COUNT(*)
FROM
    users
GROUP BY
    name, email
HAVING 
    COUNT(*) > 1

තීරු දෙකෙහිම සරලව කණ්ඩායම් කරන්න.

සටහන: පැරණි ANSI ප්‍රමිතිය GROUP BY හි සමස්ථ නොවන තීරු තිබිය යුතු නමුත් මෙය "ක්‍රියාකාරී යැපීම" යන අදහස සමඟ වෙනස් වී ඇත :

සබැඳි දත්ත සමුදා න්‍යායේ දී, ක්‍රියාකාරී පරායත්තතාවය යනු දත්ත සමුදායකින් සම්බන්ධතාවයක ගුණාංග දෙකක් අතර සීමාවකි. වෙනත් වචන වලින් කිවහොත්, ක්‍රියාකාරී යැපීම යනු සම්බන්ධතාවයක ගුණාංග අතර සම්බන්ධතාවය විස්තර කරන බාධකයකි.

සහාය අනුකූල නොවේ:


92
recordwebXL WHERE තනි වාර්තාවක් සමඟ වැඩ කරන්නේ සමූහය සමඟ වැඩ කිරීම
bjan

8
@gbn ප්‍රති results ලවල හැඳුනුම්පත ඇතුළත් කළ හැකිද? ඉන්පසු එම අනුපිටපත් මකා දැමීම පහසු වනු ඇත.
user797717

13
@ user797717: ඔබට MIN (ID) තිබිය යුතු අතර පසුව MIN (ID) අගයන් නම් අන්තිමට නොව ID අගයන් සඳහා මකා
දැමිය යුතුය

1
ඕනෑම තීරුවක ශුන්‍ය අගයන් ඇති අවස්ථා ගැන කුමක් කිව හැකිද?
අන්කිත් ඩිංග්‍රා

1
මේ සඳහා ඔබට බොහෝම ස්තූතියි, ඔව් එය ඔරකල්හි වැඩ කරයි, මට තත්වයෙහි සුවිශේෂත්වය අවශ්‍ය වුවද, ඒ වෙනුවට>1 =1
බිල් නයිලර්

371

මේක උත්සාහ කරන්න:

declare @YourTable table (id int, name varchar(10), email varchar(50))

INSERT @YourTable VALUES (1,'John','John-email')
INSERT @YourTable VALUES (2,'John','John-email')
INSERT @YourTable VALUES (3,'fred','John-email')
INSERT @YourTable VALUES (4,'fred','fred-email')
INSERT @YourTable VALUES (5,'sam','sam-email')
INSERT @YourTable VALUES (6,'sam','sam-email')

SELECT
    name,email, COUNT(*) AS CountOf
    FROM @YourTable
    GROUP BY name,email
    HAVING COUNT(*)>1

නිමැවුම්:

name       email       CountOf
---------- ----------- -----------
John       John-email  2
sam        sam-email   2

(2 row(s) affected)

ඔබට අවශ්‍ය නම් මෝඩයන්ගේ හැඳුනුම්පත් මෙය භාවිතා කරන්න:

SELECT
    y.id,y.name,y.email
    FROM @YourTable y
        INNER JOIN (SELECT
                        name,email, COUNT(*) AS CountOf
                        FROM @YourTable
                        GROUP BY name,email
                        HAVING COUNT(*)>1
                    ) dt ON y.name=dt.name AND y.email=dt.email

නිමැවුම්:

id          name       email
----------- ---------- ------------
1           John       John-email
2           John       John-email
5           sam        sam-email
6           sam        sam-email

(4 row(s) affected)

අනුපිටපත් මකා දැමීමට උත්සාහ කරන්න:

DELETE d
    FROM @YourTable d
        INNER JOIN (SELECT
                        y.id,y.name,y.email,ROW_NUMBER() OVER(PARTITION BY y.name,y.email ORDER BY y.name,y.email,y.id) AS RowRank
                        FROM @YourTable y
                            INNER JOIN (SELECT
                                            name,email, COUNT(*) AS CountOf
                                            FROM @YourTable
                                            GROUP BY name,email
                                            HAVING COUNT(*)>1
                                        ) dt ON y.name=dt.name AND y.email=dt.email
                   ) dt2 ON d.id=dt2.id
        WHERE dt2.RowRank!=1
SELECT * FROM @YourTable

නිමැවුම්:

id          name       email
----------- ---------- --------------
1           John       John-email
3           fred       John-email
4           fred       fred-email
5           sam        sam-email

(4 row(s) affected)


72

ඔබට අනුපිටපත් මකා දැමීමට අවශ්‍ය නම්, ත්‍රිත්ව උප-තේරීමකට / අමුතු පේළි පවා සොයා ගැනීමට වඩා එය කිරීමට වඩා සරල ක්‍රමයක් මෙන්න:

SELECT id, name, email 
FROM users u, users u2
WHERE u.name = u2.name AND u.email = u2.email AND u.id > u2.id

මකා දැමීමට:

DELETE FROM users
WHERE id IN (
    SELECT id/*, name, email*/
    FROM users u, users u2
    WHERE u.name = u2.name AND u.email = u2.email AND u.id > u2.id
)

IMHO කියවීමට සහ තේරුම් ගැනීමට වඩා පහසුය

සටහන: එකම ගැටළුව වන්නේ පේළි මකා නොදමන තුරු ඔබ ඉල්ලීම ක්‍රියාත්මක කළ යුතුය, මන්ද ඔබ එක් එක් අනුපිටපතෙන් 1 ක් පමණක් මකා දමයි


2
ලස්සන හා කියවීමට පහසුය; එකවර එකවර අනුපිටපත් කිහිපයක් මකා දැමූ ක්‍රමයක් සොයා ගැනීමට මම කැමතියි.
ඩිකන් රීඩ්

1
මට ලැබෙන පරිදි මෙය මට වැඩ කරන්නේ නැතYou can't specify target table 'users' for update in FROM clause
වයිට්කැට්

1
H වයිට්කැට් සරල MySQL ගැටලුවක් සේ පෙනේ: stackoverflow.com/questions/4429319/…
Tancrede Chazallet

1
මට අසමත්. මට ලැබෙන්නේ: "DBD :: CSV :: st ක්‍රියාත්මක කිරීම අසාර්ථකයි: /Users/hornenj/perl5/perlbrew/perls/perl-5.26.0/lib/site_perl/5.26 හි හැෂ් මූලද්‍රව්‍යයේ un _ [1] ආරම්භක අගය භාවිතා කිරීම. 0 / SQL / Eval.pm line 43 "
නයිජල් හෝර්න්

1
වගන්තිය "u.name = u2.name AND u.email = u2.email AND (u.id> u2.id හෝ u2.id> u.id)" විය යුත්තේ කොතැනදැයි මම සිතමි.
GiveEmTheBoot

48

පහත සඳහන් දෑ උත්සාහ කරන්න:

SELECT * FROM
(
    SELECT Id, Name, Age, Comments, Row_Number() OVER(PARTITION BY Name, Age ORDER By Name)
        AS Rank 
        FROM Customers
) AS B WHERE Rank>1

3
SELECT * හි සුළු වෙනසක් මට පැයක සෙවීමක් විසඳීමට උපකාරී විය. මම මීට පෙර කිසි දිනක පනතින් PARTITION පුරා භාවිතා කර ඇත (මම SQL එකම දෙයක් කරන්නේ කොහොමද බොහෝ ක්රම ගැන විස්මිත කිරීමට නොවයි.!
ජෝ අවිනීත


28

සාදයට මඳක් ප්‍රමාද වූ නමුත් සියලු අනුපිටපත් හැඳුනුම්පත් සොයා ගැනීමට මට නියම විසඳුමක් ලැබුණි:

SELECT GROUP_CONCAT( id )
FROM users
GROUP BY email
HAVING ( COUNT(email) > 1 )

2
අවට සින්ටැක්ටිකල් සීනි වැඩක් ලෙස පෙනේ. සොයා ගැනීම සතුටක්.
Chef_Code

3
GROUP_CONCATකලින් තීරණය කළ දිගකින් පසුව එය නතර වන බව මතක තබා ගන්න , එවිට ඔබට සියලු දේ නොලැබෙනු ඇත id.
v010dya

24

මෙම කේතය උත්සාහ කරන්න

WITH CTE AS

( SELECT Id, Name, Age, Comments, RN = ROW_NUMBER()OVER(PARTITION BY Name,Age ORDER BY ccn)
FROM ccnmaster )
select * from CTE 

23

මෙය එක් එක් අනුපිටපත් සමූහයෙන් එක් වාර්තාවක් හැර අනෙකුත් සියලුම අනුපිටපත් වාර්තා තෝරා ගනී / මකා දමයි. එබැවින්, මකාදැමීම මඟින් සියලුම අද්විතීය වාර්තා + එක් එක් අනුපිටපත් වලින් එක් වාර්තාවක් තබයි.

අනුපිටපත් තෝරන්න:

SELECT *
FROM table
WHERE
    id NOT IN (
        SELECT MIN(id)
        FROM table
        GROUP BY column1, column2
);

අනුපිටපත් මකන්න:

DELETE FROM table
WHERE
    id NOT IN (
        SELECT MIN(id)
        FROM table
        GROUP BY column1, column2
);

විශාල ප්‍රමාණයේ වාර්තා ගැන සැලකිලිමත් වන්න, එය කාර්ය සාධන ගැටළු ඇති කළ හැකිය.


2
මකාදැමීමේ විමසුමේ දෝෂයකි - FROM වගන්තිය යාවත්කාලීන කිරීම සඳහා ඔබට ඉලක්ක නගර 'නගර' සඳහන් කළ නොහැක
අලි අසාර්

2
'නගර' වගුවක් හෝ යාවත්කාලීන වගන්තියක් නොමැත. ඔයා අදහස් කරන්නේ කුමක් ද? මකාදැමීමේ විමසුමේ දෝෂයක් ඇත්තේ කොහේද?
මාටින් සිලොව්ස්කි

3
"OP" යන්නෙන් අදහස් කරන්නේ කුමක්ද?
මාටින් සිලොව්ස්කේ

19

ඔබ ඔරකල් සමඟ වැඩ කරන්නේ නම්, මෙම ක්‍රමය වඩාත් සුදුසු වනු ඇත:

create table my_users(id number, name varchar2(100), email varchar2(100));

insert into my_users values (1, 'John', 'asd@asd.com');
insert into my_users values (2, 'Sam', 'asd@asd.com');
insert into my_users values (3, 'Tom', 'asd@asd.com');
insert into my_users values (4, 'Bob', 'bob@asd.com');
insert into my_users values (5, 'Tom', 'asd@asd.com');

commit;

select *
  from my_users
 where rowid not in (select min(rowid) from my_users group by name, email);

15
select name, email
, case 
when ROW_NUMBER () over (partition by name, email order by name) > 1 then 'Yes'
else 'No'
end "duplicated ?"
from users

2
කේතය පමණක් පිළිතුරු තොග පිටාර ගැලීම මත පැටලී ඇත, මෙය ප්‍රශ්නයට පිළිතුරු දෙන්නේ මන්දැයි ඔබට පැහැදිලි කළ හැකිද?
පොහොසත් බෙනර්

2
Ich රිච්බෙනර්: ප්‍රති result ලයේ සෑම පේළියක්ම සහ සෑම අනුපිටපත් පේළියක්ම සහ එකවර බැලූ බැල්මට නොපවතින බවත්, කණ්ඩායම් වශයෙන් නොයැවිය යුතු බවත් පවසන ප්‍රතිචාරය මට හමු නොවීය, මන්ද අපට මෙය ඒකාබද්ධ කිරීමට අවශ්‍ය නම් වෙනත් විමසුම් කණ්ඩායමක් සමඟ විමසීම හොඳ විකල්පයක් නොවේ.
නරේන්ද්‍ර

2
තෝරාගත් ප්‍රකාශයට අයිඩී එකතු කිරීම සහ අනුපිටපත් මත පෙරීම මඟින් අනුපිටපත් අයිඩී මකාදැමීමට සහ එක් එක් ඒවා දිගටම පවත්වා ගැනීමට ඔබට හැකියාව ලැබේ.
ඇන්ටොයින් රයින්හෝල්ඩ් බර්ට්‍රන්ඩ්

12

ඔබේ වගුවේ අනුපිටපත් පේළි තිබේදැයි බැලීමට ඔබට අවශ්‍ය නම්, මම පහත භාවිතා කළේ විමසුම:

create table my_table(id int, name varchar(100), email varchar(100));

insert into my_table values (1, 'shekh', 'shekh@rms.com');
insert into my_table values (1, 'shekh', 'shekh@rms.com');
insert into my_table values (2, 'Aman', 'aman@rms.com');
insert into my_table values (3, 'Tom', 'tom@rms.com');
insert into my_table values (4, 'Raj', 'raj@rms.com');


Select COUNT(1) As Total_Rows from my_table 
Select Count(1) As Distinct_Rows from ( Select Distinct * from my_table) abc 

11

මෙය මා ඉදිරිපත් කළ පහසුම දෙයයි. එය පොදු වගු ප්‍රකාශනයක් (CTE) සහ කොටස් කවුළුවක් භාවිතා කරයි (මෙම විශේෂාංග SQL 2008 සහ පසුව ඇති බව මම සිතමි).

මෙම උදාහරණයෙන් අනුපිටපත් නාමය සහ ඩොබ් ඇති සියලුම සිසුන් සොයා ගනී. අනුපිටපත් කිරීම සඳහා ඔබට පරීක්ෂා කිරීමට අවශ්‍ය ක්ෂේත්‍ර OVER වගන්තියට ඇතුළත් වේ. ප්‍රක්ෂේපණය තුළ ඔබට අවශ්‍ය වෙනත් ක්ෂේත්‍ර ඇතුළත් කළ හැකිය.

with cte (StudentId, Fname, LName, DOB, RowCnt)
as (
SELECT StudentId, FirstName, LastName, DateOfBirth as DOB, SUM(1) OVER (Partition By FirstName, LastName, DateOfBirth) as RowCnt
FROM tblStudent
)
SELECT * from CTE where RowCnt > 1
ORDER BY DOB, LName


10

අනුපිටපත් අගයන් ගණනය කරන්නේ කෙසේද ?? එක්කෝ එය 2 වතාවක් හෝ 2 ට වඩා වැඩි වේ. ඒවා ගණන් කරන්න, කණ්ඩායම් වශයෙන් නොවේ.

තරම් සරලයි

select COUNT(distinct col_01) from Table_01

2
ඇසූ පරිදි ප්‍රශ්නය සඳහා මෙය ක්‍රියා කරන්නේ කෙසේද? මෙම වන්නේ නැහැ පේළි විවිධ පේළි කිහිපයක් තීරු බව අනුපිටපත් තොරතුරු (උදා: "විද්යුත් තැපැල්" සහ "නම") දෙන්න.
ජෙරොයින්

10

CTE භාවිතා කිරීමෙන් අපට මේ වගේ අනුපිටපත් අගයක් සොයාගත හැකිය

with MyCTE
as
(
select Name,EmailId,ROW_NUMBER() over(PARTITION BY EmailId order by id) as Duplicate from [Employees]

)
select * from MyCTE where Duplicate>1

9
 select emp.ename, emp.empno, dept.loc 
          from emp
 inner join dept 
          on dept.deptno=emp.deptno
 inner join
    (select ename, count(*) from
    emp
    group by ename, deptno
    having count(*) > 1)
 t on emp.ename=t.ename order by emp.ename
/

9

SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1;

කිසියම් තීරුවක නැවත නැවත අගයන් සෙවීම සඳහා මෙය නිසි ලෙස ක්‍රියා කරනු ඇතැයි මම සිතමි.


7
මෙය ඉහළ පිළිතුරට කිසිවක් එකතු නොකරන අතර තාක්‍ෂණිකව OP හි කේතයේ ප්‍රශ්නයට වඩා වෙනස් නොවේ.
ජෙරොයින්


6

මෙයද ක්‍රියාත්මක විය යුතුය, සමහර විට එය උත්සාහ කර බලන්න.

  Select * from Users a
            where EXISTS (Select * from Users b 
                where (     a.name = b.name 
                        OR  a.email = b.email)
                     and a.ID != b.id)

ඔබගේ නඩුවේ විශේෂයෙන් හොඳයි ඔබ යම් ආකාරයක උපසර්ගයක් හෝ සාමාන්‍ය වෙනසක් ඇති අනුපිටපත් සොයන්නේ නම් උදා. එවිට ඔබට මෙම තීරුවල ප්‍රතිස්ථාපනය () භාවිතා කළ හැකිය


5

ඔබට අනුපිටපත් දත්ත සොයා ගැනීමට අවශ්‍ය නම් (නිර්ණායක එකක් හෝ කිහිපයක්) සහ සත්‍ය පේළි තෝරන්න.

with MYCTE as (
    SELECT DuplicateKey1
        ,DuplicateKey2 --optional
        ,count(*) X
    FROM MyTable
    group by DuplicateKey1, DuplicateKey2
    having count(*) > 1
) 
SELECT E.*
FROM MyTable E
JOIN MYCTE cte
ON E.DuplicateKey1=cte.DuplicateKey1
    AND E.DuplicateKey2=cte.DuplicateKey2
ORDER BY E.DuplicateKey1, E.DuplicateKey2, CreatedAt

http://developer.azurewebsites.net/2014/09/better-sql-group-by-find-duplicate-data/


4
SELECT name, email,COUNT(email) 
FROM users 
WHERE email IN (
    SELECT email 
    FROM users 
    GROUP BY email 
    HAVING COUNT(email) > 1)

එය සම්පූර්ණ වගුවට යොමු නොවන්නේ නම් ඔබට COUNTනොමැතිව භාවිතා කළ නොහැක GROUP BY.
රැල්ෆ් ෆ්‍රීඩ්ල්

සමූහයක් නොමැතිව ඔබ COUNT භාවිතා කළ නමුත් මෙහි මම COUNT ලිවීමට යතුරු ලියනය කිරීමේ වැරැද්දක් කර ඇත
මොහොමඩ් නියමුල් ඉස්ලාම්

3

අනුපිටපත් ඇති නම් මකා දැමීමට

;WITH CTE AS    
(

    SELECT ROW_NUMBER() OVER (PARTITION BY name ORDER BY name) AS T FROM     @YourTable    
)

DELETE FROM CTE WHERE T > 1

3

වගුවක අනුපිටපත් වාර්තාවෙන් පරීක්ෂා කිරීමට.

select * from users s 
where rowid < any 
(select rowid from users k where s.name = k.name and s.email = k.email);

හෝ

select * from users s 
where rowid not in 
(select max(rowid) from users k where s.name = k.name and s.email = k.email);

වගුවක අනුපිටපත් වාර්තාව මකා දැමීමට.

delete from users s 
where rowid < any 
(select rowid from users k where s.name = k.name and s.email = k.email);

හෝ

delete from users s 
where rowid not in 
(select max(rowid) from users k where s.name = k.name and s.email = k.email);

2

මෙහි වැදගත්ම දෙය වන්නේ වේගවත්ම ක්‍රියාකාරිත්වය තිබීමයි. අනුපිටපත් වල දර්ශක ද හඳුනාගත යුතුය. ස්වයං සම්බන්ධ වීම හොඳ විකල්පයක් වන නමුත් වේගවත් ශ්‍රිතයක් ලබා ගැනීම සඳහා පළමුව අනුපිටපත් ඇති පේළි සොයා ගැනීම වඩා හොඳ වන අතර පසුව අනුපිටපත් පේළි වල හැඳුනුම්පත සොයා ගැනීම සඳහා මුල් වගුව සමඟ සම්බන්ධ වන්න. අවසාන වශයෙන් හැඳුනුම්පත හැර ඕනෑම තීරුවකින් අනුපිටපත් පේළි එකිනෙකට ආසන්නව ඇණවුම් කරන්න.

SELECT u.*
FROM users AS u
JOIN (SELECT username, email
      FROM users
      GROUP BY username, email
      HAVING COUNT(*)>1) AS w
ON u.username=w.username AND u.email=w.email
ORDER BY u.email;


1

පහත දැක්වෙන පරිදි සමස්ථ කාර්යයන් සඳහා ක්‍රියා කරන අපට මෙහි තිබීම භාවිතා කළ හැකිය

create table #TableB (id_account int, data int, [date] date)
insert into #TableB values (1 ,-50, '10/20/2018'),
(1, 20, '10/09/2018'),
(2 ,-900, '10/01/2018'),
(1 ,20, '09/25/2018'),
(1 ,-100, '08/01/2018')  

SELECT id_account , data, COUNT(*)
FROM #TableB
GROUP BY id_account , data
HAVING COUNT(id_account) > 1

drop table #TableB

මෙහි ක්ෂේත්‍ර දෙකක් ලෙස id_account සහ දත්ත ගණන් (*) සමඟ භාවිතා වේ. එබැවින්, එය තීරු දෙකෙහිම එක ගුණයකට වඩා වැඩි අගයන් ඇති සියලුම වාර්තා ලබා දෙනු ඇත.

SQL සේවාදායක වගුවේ කිසියම් බාධකයක් එක් කිරීමට අපට වැරදී ඇති බවට යම් හේතුවක් වැරදීමකින් සිදුවී ඇති අතර ඉදිරිපස යෙදුම සමඟ සියලුම තීරු වල වාර්තා අනුපිටපත් ඇතුළත් කර ඇත. වගුවෙන් අනුපිටපත් විමසුම මකා දැමීමට අපට පහත විමසුම භාවිතා කළ හැකිය.

SELECT DISTINCT * INTO #TemNewTable FROM #OriginalTable
TRUNCATE TABLE #OriginalTable
INSERT INTO #OriginalTable SELECT * FROM #TemNewTable
DROP TABLE #TemNewTable

මෙන්න අපි orignal table හි සියලු සුවිශේෂී වාර්තා ගෙන මුල් වගුවේ වාර්තා මකා දැමුවෙමු. නැවතත් අපි නව වගුවේ සිට මුල් වගුව දක්වා සියලු වෙනස් අගයන් ඇතුළත් කර නව වගුව මකා දැමුවෙමු.


1

ඔබට මෙය උත්සාහ කිරීමට අවශ්‍ය විය හැකිය

SELECT NAME, EMAIL, COUNT(*)
FROM USERS
GROUP BY 1,2
HAVING COUNT(*) > 1

0

අනුපිටපත් ඉවත් කිරීම සඳහා ඔබට SELECT DISTINCT යතුරු පදය භාවිතා කළ හැකිය. ඔබට නමින් පෙරහන් කළ හැකි අතර එම නම ඇති සියල්ලන් මේසය මත ලබා ගත හැකිය.


0

ඔබට අනුපිටපත් පේළි සොයා ගැනීමට අවශ්‍යද යන්න හෝ එකම ඊමේල් සහ නම සහිත වෙනස් අයිඩී පමණක් තිබේද යන්න මත පදනම්ව නිශ්චිත කේතය වෙනස් වේ. හැඳුනුම්පත ප්‍රාථමික යතුරක් හෝ වෙනත් ආකාරයකින් අද්විතීය බාධකයක් තිබේ නම් මෙම වෙනස නොපවතී, නමුත් ප්‍රශ්නය මෙය සඳහන් නොකරයි. කලින් අවස්ථාවකදී ඔබට වෙනත් පිළිතුරු කිහිපයකින් ලබා දී ඇති කේතය භාවිතා කළ හැකිය:

SELECT name, email, COUNT(*)
FROM users
GROUP BY name, email
HAVING COUNT(*) > 1

අවසාන අවස්ථාවේදී ඔබ භාවිතා කරන්නේ:

SELECT name, email, COUNT(DISTINCT id)
FROM users
GROUP BY name, email
HAVING COUNT(DISTINCT id) > 1
ORDER BY COUNT(DISTINCT id) DESC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.