web-gelistirme-sc.com

Mysql'de sadece yinelenen kayıtları seçin ve görüntüleyin

Bu soru oldukça basit ben nedense sadece yinelenen kayıtları görüntülemek için uygun sonuç alamıyorum

Table   : Paypal_ipn_orders
id                              payer_email
1                               [email protected]
2                               [email protected]   
3                               [email protected]
4                               [email protected]
5                               [email protected]

SELECT id, COUNT( payer_email ) `tot`
FROM Paypal_ipn_orders
GROUP BY payer_email
HAVING `tot` >1

örnek çıktı 

id       tot
1         2
4         2

beklenen çıktı

id       payer_email 
1        [email protected]
3        [email protected]
4        [email protected]
5        [email protected]

Bunu nasıl yapabilirim? 

21
user1542036
SELECT id, payer_email
FROM Paypal_ipn_orders
WHERE payer_email IN (
    SELECT payer_email
    FROM Paypal_ipn_orders
    GROUP BY payer_email
    HAVING COUNT(id) > 1
)

sqlfiddle

46
lc.

IN durumumda çok yavaştı (180 saniye)

Bu yüzden onun yerine JOIN__ kullandım (0.3 sn)

SELECT i.id, i.payer_email
FROM Paypal_ipn_orders i
INNER JOIN (
 SELECT payer_email
    FROM Paypal_ipn_orders 
    GROUP BY payer_email
    HAVING COUNT( id ) > 1
) j ON i.payer_email=j.payer_email
10
Timo Huovinen

i̇şte basit bir örnek: 

select <duplicate_column_name> from <table_name> group by <duplicate_column_name> having count(*)>=2

Kesinlikle işe yarayacak. :)

2
Gaurav Gupta

Tablodaki tüm yinelenen satırların bir listesini alın:

Select * from TABLE1 where PRIMARY_KEY_COLUMN NOT IN ( SELECT PRIMARY_KEY_COLUMN
FROM TABLE1 
GROUP BY DUP_COLUMN_NAME having (count(*) >= 1))
2
kasiviswanatham

bu kodu kullan 

 SELECT *  
    FROM  Paypal_ipn_orders 
    GROUP BY  payer_email  
    HAVING COUNT( payer_email) >1  
1
M.Ganji

Yukarıdaki değil, aynı olmayan veya her iki satır verisi için aynı olabilecek bir veya daha fazla sütun değeri seçmek istersem, yukarıdaki yanıt işe yaramayacak 

Örn. Kullanıcı adını, doğum tarihini de seçmek istiyorum. Ancak veritabanında kullanıcı adı çift değil, doğum tarihi çift olacak ve bu çözüm işe yaramayacak.

Bunun için bu çözümü kullanın.

SELECT  
    distinct(p1.id),  p1.payer_email , p1.username, p1.birth_date

FROM 
    Paypal_ipn_orders AS p1 

INNER JOIN Paypal_ipn_orders AS p2 

ON p1.payer_email=p2.payer_email

WHERE 

p1.birth_date=p2.birth_date

Yukarıdaki sorgu, aynı email_id ve aynı doğum tarihine sahip tüm kayıtları verecektir.

1
Sameer Kazi

Bu benim için en hızlı çalışır

SELECT
    primary_key
FROM
    table_name
WHERE
    primary_key NOT IN (
        SELECT
            primary_key
        FROM
            table_name
        GROUP BY
            column_name
        HAVING
            COUNT(*) = 1
    );
0
Incognito
SELECT id, payer_email FROM Paypal_ipn_orders
WHERE payer_email IN (
    SELECT payer_email FROM papypal_ipn_orders GROUP BY payer_email HAVING COUNT(*) > 1)
0
Kermit

bu cevaba benzer , bunun yerine geçici bir tablo kullandım:

CREATE TEMPORARY TABLE duplicates (
    SELECT payer_email
    FROM Paypal_ipn_orders
    GROUP BY payer_email
    HAVING COUNT(id) > 1
);
SELECT id, payer_email
FROM Paypal_ipn_orders AS p
INNER JOIN duplicates AS d ON d.payer_email=p.payer_email;
0
jdenoc
SELECT * FROM `table` t1 join `table` t2 WHERE (t1.name=t2.name) && (t1.id!=t2.id)
0
user3237205

Bence bu yol daha basit. Çıktı, kimliği ve ödeme yapan kişinin e-postasını bu tabloda birden fazla kayıtta bulunan ödeme yapan kişinin e-postasını görüntüler. Sonuçlar kimliğe göre sıralanır.

    SELECT id, payer_email
    FROM Paypal_ipn_orders
    WHERE COUNT( payer_email )>1
    SORT BY id;
0
Filippos