• 23-11-2015, 03:44:52
    #1
    Merhaba,

    MYSQL'de iki sütunda birden tekrar eden kayıtları bulup teke düşürmek istiyorum.

    Örnek şema:
    id | ad | yaş | cinsiyet
    ---------------------------------
    1 | ali | 18 | erkek
    2 | veli | 11 | erkek
    3 | ayşe | 21 | kadın
    4 | ali | 14 | erkek


    Bu şemada AD ve CİNSİYET verilerinin her ikisi de aynı olan kayıtları teke düşürmek istiyorum. 1. ve 4. kayıtların ad ve cinsiyet sütunları birbirinin aynısı. Bunlardan birini silmem gerekiyor.

    PHP ile çözebiliyorum fakat database çok büyük ve aynı işlem birkaç büyük tabloda tekrarlanacak. SQL üzerinde bir çözüm arıyorum.

    Yardımlarınız için şimdiden teşekkürler.

    EDIT:
    Çözümü buldum, başkalarının da işine yarayabilir diye paylaşıyorum.

    // ad ve cinsiyet sütunlarında tekrar eden kayıtlar varsa getirir, select * yerine delete uyeler from uyeler yazarsanız kayıtları teke düşürür. Dilerseniz aynı yapıyı kullanarak karşılaştıracağınız sütun sayısını artırabilirsiniz. (Denemeden önce mutlaka yedek alın.)

    SELECT *
    FROM uyeler ta
    INNER JOIN
    	(
            select min(id) minid,ad,cinsiyet
            from uyeler
            group by ad,cinsiyet
            having count(*) > 1
        ) t 
    ON ta.ad = t.ad and ta.cinsiyet = t.cinsiyet and t.minid = ta.id
    İyi çalışmalar.
  • 23-11-2015, 07:00:09
    #2
    SELECT * FROM TABLO GROUP BY AD, CINSIYET

    TURKCELL T60 cihazımdan Tapatalk kullanılarak gönderildi
  • 23-11-2015, 08:31:57
    #3
    DISTINCT sözcügüne bakın