Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi
Ön Sipariş Talebinde Bulunan Üyelerimiz
Sipariş Talebinde Bulunan Üyelerimiz

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
İki tablo karşılaştırma yardım
#1
Merhaba arkadaşlar 

2 tane aynı tablom var ve alanlar aynıdır.

Örnek olarak  (aşağıda örnek olarak verdim fakat benim tabloda 8 alan karşılaştırmam lazım)

Tablo 1

ID 
ADI 
SOYADI
ADRES
TELEFON

Tablo 2
ID 
ADI 
SOYADI
ADRES
TELEFON

Bu iki tablo karşılaştırmam gerekiyor yani TABLO2 'deki her alan TABLO1 ile karşılaştırmam lazım 

Örnek

Satır 1  TABLO 1 
1       MEHMET     YILMAZ   ANKARA   0555 555 555

Satır1 TABLO2

1      MEHMET    YILMAZ   ANKARA    0522 222 2222

Yani burada ben her alanı karşılaştırmam gerekiyor ve buradaki örnekteki gibi son TELEFON farklı ise o kayıt getirecek

Normal olarak 8 alan olunca ve sql sorgu ile not exists kullandığımda pek ii bir hız alamıyorum. 

Not: şu anda 2000 yakın kayıt var iki tabloda ve db access.

Sizin öneriniz nedir?

Teşekkürler
WWW
Cevapla
#2
Güncelleme alanı neye göre olacak yani primary key varmı? İki tabloda da anı olan field varmı ?
Cevapla
#3
"UNION" sorgusu kurarak tek bir liste elde edebilirsin. Bu sorguyu tasarlarken hangi alanlardaki farka bakacağını belirtmen yeterli olur. Malesef ID alanı bu noktada senin işine yaramayacaktır. Örneğin;

SELECT ADI, SOYADI, TELEFON FROM TABLO_1
UNION 
SELECT ADI, SOYADI, TELEFON FROM TABLO_2
ORDER BY SOYADI, ADI, TELEFON

gibi bir sorgu cümlesi kıyaslama yapmana yardımcı olabilir. Bu yöntemin tek paradoks hangi satırın hangi tablodan geldiğini kestirememek olacaktır. Onu da TELEFON sütunundaki veriyi her iki tabloda da sorgulayarak bulabilirsin.

Benzer bir yolu ADRES sütunu için de yapabilirsin.
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#4
Eğer iki tablodan aynı alanları mevcut veri varsa;

DROP TABLE TBLCASABIT1
GO
DROP TABLE TBLCASABIT2
GO
CREATE TABLE [dbo].[TBLCASABIT1](
[CARI_KODU] [varchar](50) NOT NULL,
[CARI_ADI] [varchar](50) NULL,
[TELEFON] [varchar](50) NULL,
[GSM] [varchar](50) NULL,
[IL] [varchar](50) NULL,
CONSTRAINT [PK_TBLCASABIT1] PRIMARY KEY CLUSTERED 
(
[CARI_KODU] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[TBLCASABIT2](
[CARI_KODU] [varchar](50) NOT NULL,
[CARI_ADI] [varchar](50) NULL,
[TELEFON] [varchar](50) NULL,
[GSM] [varchar](50) NULL,
[IL] [varchar](50) NULL,
CONSTRAINT [PK_TBLCASABIT2] PRIMARY KEY CLUSTERED 
(
[CARI_KODU] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

INSERT INTO TBLCASABIT1 (CARI_KODU,CARI_ADI,TELEFON,GSM,IL)
VALUES ('1','DENEME1','TELEFON1','GSM1','AYDIN')
GO
INSERT INTO TBLCASABIT1 (CARI_KODU,CARI_ADI,TELEFON,GSM,IL)
VALUES ('2','DENEME2','TELEFON1','GSM2','AYDIN')
GO
INSERT INTO TBLCASABIT1 (CARI_KODU,CARI_ADI,TELEFON,GSM,IL)
VALUES ('3','DENEME3','TELEFON1','GSM3','AYDIN')
GO
INSERT INTO TBLCASABIT1 (CARI_KODU,CARI_ADI,TELEFON,GSM,IL)
VALUES ('4','DENEME4','TELEFON1','GSM4','AYDIN')

INSERT INTO TBLCASABIT2 (CARI_KODU,CARI_ADI,TELEFON,GSM,IL)
VALUES ('1','DENEME1','TELEFON1','GSM1','AYDIN')
GO
INSERT INTO TBLCASABIT2 (CARI_KODU,CARI_ADI,TELEFON,GSM,IL)
VALUES ('2','DENEME2','TELEFON1','GSM2','AYDIN')
GO
INSERT INTO TBLCASABIT2 (CARI_KODU,CARI_ADI,TELEFON,GSM,IL)
VALUES ('3','DENEME3','TELEFON1','DEGISIK','AYDIN')
GO
INSERT INTO TBLCASABIT2 (CARI_KODU,CARI_ADI,TELEFON,GSM,IL)
VALUES ('4','DENEME4','TELEFON1','GSM4','AYDIN')

SELECT TABLO1.*,TABLO2.* FROM TBLCASABIT1 TABLO1 INNER JOIN TBLCASABIT2 TABLO2 ON TABLO1.CARI_KODU=TABLO2.CARI_KODU
WHERE TABLO1.CARI_ADI<>TABLO2.CARI_ADI OR TABLO1.TELEFON<>TABLO2.TELEFON OR TABLO1.GSM<>TABLO2.GSM OR TABLO1.IL<>TABLO2.IL

MSSQL de deniyebildim.

Konuyu yanlış da anlamış olabilirim.
Cevapla
#5
teşekkür ederim arkadaşlar denyeceğım
WWW
Cevapla
#6
Mssql için en hızlı ve basit yöntem except ile karşılaştırmaktır. Googleda aratarak birçok örnek bulabilirsiniz
Cevapla
#7
Merhaba

Aynı sorunu bende yaşamıştım.. Her gün excel geliyor ve önceki dataların içinde olmayan datların tabloya aktarılması isteniyordu. Tabiiki benim kod daha uzun ama size daha kısaltarak (3 alan olacak şekilde..) yazıyorum aşağıya.. Bu arada, burada autoinc alan olan ID alanını asla karıştırmayın işe..
INSERT INTO ifdata 
(
kullanici_kodu,
datatipi,
interaktif_muracaat_no
)


SELECT DISTINCT
kullanici_kodu,
datatipi,
interaktif_muracaat_no 
FROM 
(
SELECT 
t1.kullanici_kodu,
t1.datatipi,
t1.interaktif_muracaat_no
FROM ifdata_temp t1
WHERE 1=1
AND NOT EXISTS 
(
SELECT NULL 
FROM ifdata t2
WHERE 1=1
AND t1.kullanici_kodu          = t2.kullanici_kodu         
AND t1.datatipi                = t2.datatipi               
AND t1.interaktif_muracaat_no  = t2.interaktif_muracaat_no 
)
) tbl
GROUP BY kullanici_kodu,
datatipi,
interaktif_muracaat_no
;
// Bilgi paylaştıkça çoğalır.. 

WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Unit Testler Yardım r3n4m3 0 72 28-10-2018, Saat: 13:45
Son Yorum: r3n4m3



Konuyu Okuyanlar: 1 Ziyaretçi