SQL ile tekrarlı kayıtları silmek

MySQL tablosundan tekrarlı kayıtların nasıl silineceği hakkında bilgi vereceğim. Tekrarlı kayıtları silmek disk alanından kazanmayı ve sorguların daha hızlı çalışmasını sağlar.

1. Yöntem

Bu yöntemde tekrarsız kayıtlar sorgulanarak yedek bir tabloya aktarılır, daha sonra ana tablo silinerek yadek tablonun adı ana tablo ile aynı yapılır. Öncelikle ana tablodan (tablo1) distinct kelimesi ile benzersiz kayıtlar listelenir. Distinct ifadesi tekrar eden kayıtları listelemez sadece birbirinden farklı kayıtlar getirilir. Geelen kayıtlar yeni bir tabloya kaydedilerek eski ktablo silinir. Sonuçta tekrarlı kayıtların ayıklandığı bir tablo elde edilmiş olur. Bu şöyle yapıyoruz:

CREATE TABLE yeni_tablo as SELECT * FROM eski_tablo WHERE 1 GROUP BY alan_adi1

Bu örnekte alan_adi1 isimli alana göre tekrarlı kayıtlar guruplanarak tek kayıda indirgeniyor ve dönen sonuçdan yeni_tablo isminde bir tablo oluşturuluyor. Tekrarlanan satırları tanımlamak için birden fazla alan da kullanılabilir.

CREATE TABLE yeni_tablo as SELECT * FROM eski_tablo WHERE 1 GROUP BY alan_adi1, alan_adi2, alan_adi3...

2. Yöntem

Bu kodu benim için oluşturan Emin Kadıoğlu dostuma teşekkür ederek kodu vermek istiyorum.

delete from ayrinti_tablo1 where a1no in <br/>(select a1no from (select b.a1no from ayrinti_tablo1 b where b.a1no not in <br/>(select c.a1no from ayrinti_tablo1 c group by c.atno)) as deneme);

SQL kodunu denemek için aşağıdaki veri yapısını kullanarabilirsiniz.


/*
MySQL Data Transfer
Source Host: localhost
Source Database: deneme
Target Host: localhost
Target Database: deneme
Date: 07.08.2008 18:05:56
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for ayrinti_tablo1
-- ----------------------------
CREATE TABLE `ayrinti_tablo1` (
  `a1no` int(11) NOT NULL auto_increment,
  `atno` int(11) default NULL,
  `bilgi1` varchar(100) default NULL,
  `bilgi2` varchar(100) default NULL,
  PRIMARY KEY  (`a1no`)
) ENGINE=MyISAM DEFAULT CHARSET=latin5;

-- ----------------------------
-- Records 
-- ----------------------------
INSERT INTO `ayrinti_tablo1` VALUES ('23', '2', 'tret', null);
INSERT INTO `ayrinti_tablo1` VALUES ('27', '2', 'wqe', null);
INSERT INTO `ayrinti_tablo1` VALUES ('28', '3', 'wqe', null);
INSERT INTO `ayrinti_tablo1` VALUES ('29', '3', 'wqe', null);
INSERT INTO `ayrinti_tablo1` VALUES ('22', '3', 're', null);
INSERT INTO `ayrinti_tablo1` VALUES ('31', '2', 'wqe', null);
INSERT INTO `ayrinti_tablo1` VALUES ('26', '2', 'qwe', null);
INSERT INTO `ayrinti_tablo1` VALUES ('30', '2', 'wqe', null);
INSERT INTO `ayrinti_tablo1` VALUES ('25', '4', 'wqe', null);
INSERT INTO `ayrinti_tablo1` VALUES ('32', '3', 'wqe', null);
INSERT INTO `ayrinti_tablo1` VALUES ('33', '2', 'wq', null);


Yazar: Özgür Koca

Yazar - Tankado.com

“SQL ile tekrarlı kayıtları silmek” için 2 yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.