Tablo Karşılaştırma

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Tablo Karşılaştırma

Mesaj gönderen ASE »

Arkadaşlar merhabalar.
Uzun zaman sonra foruma ilk sorumu soruyorum içinden çıkamadım. Biraz uzak kaldım da programlama işinden.
Aslında bu bölümde sorulan son soruya çok benziyor soru.
İki tablom var. Tablolar arasında ilişki kurulabilecek bir alan mevcut değil.

tarihler ve personel adlarında

Tarihler

INT TARIH
1 01.01.2015
2 02.01.2015
3 03.01.2015
4 04.01.2015
5 05.01.2015
6 06.01.2015
7 07.01.2015
8 08.01.2015
9 09.01.2015
10 10.01.2015

Personel

INT ADI TARİH
1 ASE 01.01.2015
2 HASAN 01.01.2015
3 HÜSEYİN 02.01.2015
4 ASE 03.01.2015
5 HASAN 03.01.2015
6 HÜSEYİN 06.01.2015
7 ASE 07.01.2015
8 HASAN 07.01.2015
9 HÜSEYİN 07.01.2015
10 ASE 08.01.2015



Burada bir karşılaştırma yaparak birinci tabloda olan fakat iKinci tabloda olmayan kayıtları almak istiyorum

çıktı

ADI TARIH
ASE 02.02.2015
ASE 04.01.2015
ASE 05.01.2015
ASE 06.01.2015


yardımlarınızı bekliyorum.

Kolay gelsin.
En son ASE tarafından 03 Oca 2016 10:47 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1269
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Tablo Karşılaştırma

Mesaj gönderen ALUCARD »

Abi bu ara yoğunum. İlk firsatta ilgilencem seninle
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Re: Tablo Karşılaştırma

Mesaj gönderen ASE »

Olsun forumdan gelir bana cevap.
İnancım sonsuz.
Burda hiçbir sorum cevapsız kalmadı şimdiye kadar.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1269
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Tablo Karşılaştırma

Mesaj gönderen ALUCARD »

http://www.yazilimmutfagi.com/10094/ver ... lmasi.aspx

Abi bu adreste istediğin gibi bi örnek var. Bi incele istersen
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Re: Tablo Karşılaştırma

Mesaj gönderen ASE »

Baktım baktım. Soruyu buraya sormamak için 1 haftadır uğraşıyorum zaten. İnternetteki bütün örnekleri inceledim. Oturup venn şemaları çizdim. Viewler oluşturdum ama işin içinden çıkamadım. Hayırlısı bakalım.
Tablolar ilişkili olmayınca hepsi boşta kalıyor. Birde isimleri ve tarih aralığını süzme girince işin içine hepten karışıyor iş.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo Karşılaştırma

Mesaj gönderen denizfatihi »

Merhaba,

Geçtiğimiz günlerde bana da gerekmişti, sağolsun bir arkadaşımız aşağıdaki sorguyu vermiş.

Kod: Tümünü seç

select * from Atablosu left outer join Btablosu on Atablosu.Personel_id=Btablosu.Personel_id







ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Re: Tablo Karşılaştırma

Mesaj gönderen ASE »

denizfatihi yazdı:Merhaba,

Geçtiğimiz günlerde bana da gerekmişti, sağolsun bir arkadaşımız aşağıdaki sorguyu vermiş.

Kod: Tümünü seç

select * from Atablosu left outer join Btablosu on Atablosu.Personel_id=Btablosu.Personel_id
Soruyu sorarken sizin konunuza atıf yapmıştım zaten. Bendeki sıkıntı iki tabloyu birbiriyle ilişkilendirecek bir alanın olmayışı.
Sağolun
Kolay gelsin
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo Karşılaştırma

Mesaj gönderen denizfatihi »

Ben çalıştırırken A tablosunda tüm personelin var olduğunu sayıyorum B tablosunda ise var onları, sorgunun sonucunda A tablosunda ki tarih boş kalıyor ise B tablosunda yoktur gibi düşün.

Tarihleri baz al
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Re: Tablo Karşılaştırma

Mesaj gönderen ASE »

denizfatihi yazdı:
Ben bütün Joiner exist ve not in komutlarını denedim ama istediğim çıktığı almayı başaramadım. Eğer mümkünse yukarıdaki alan adları vw verilerle örnek bir veritabanı oluşturup deneyebilir misiniz? Kusura bakmayın çok şey istiyorum ama bir haftadır internetteki bütün örnekleri inceledim ve denedim.
Kolay gelsin.
En son ASE tarafından 04 Oca 2016 11:24 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo Karşılaştırma

Mesaj gönderen denizfatihi »

Tablo createleri gönder yarın gün içinde test edeyim. Birde 3 veya 4 örnek satır
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Re: Tablo Karşılaştırma

Mesaj gönderen ASE »

SQL Serverda oluşturduğum scripti aşağıda veriyorum.

Kolay gelsin.


Kod: Tümünü seç

CREATE TABLE [dbo].[tarihler] ([sira] int, [tarih] date)

CREATE TABLE [dbo].[Personel]([IND] [int], [TARIH] [date], [adi] [nvarchar](50)) 

INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (1, CAST(N'2015-01-15' AS Date))
INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (2, CAST(N'2015-01-16' AS Date))
INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (3, CAST(N'2015-01-19' AS Date))
INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (4, CAST(N'2015-01-20' AS Date))
INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (5, CAST(N'2015-01-21' AS Date))
INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (6, CAST(N'2015-01-22' AS Date))
INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (7, CAST(N'2015-01-23' AS Date))
INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (8, CAST(N'2015-01-26' AS Date))
INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (9, CAST(N'2015-01-27' AS Date))
INSERT [dbo].[tarihler] ([sira], [tarih]) VALUES (0, CAST(N'2015-01-28' AS Date))

INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (1, CAST(N'2015-01-15' AS Date), N'MURAT BAL')
INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (2, CAST(N'2015-01-16' AS Date), N'YALÇIN KAYA')
INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (3, CAST(N'2015-01-19' AS Date), N'MURAT BAL')
INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (4, CAST(N'2015-01-20' AS Date), N'YALÇIN KAYA')
INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (5, CAST(N'2015-01-20' AS Date), N'MURAT BAL')
INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (6, CAST(N'2015-01-21' AS Date), N'NURHAN MUTLU')
INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (7, CAST(N'2015-01-23' AS Date), N'NURHAN MUTLU')
INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (8, CAST(N'2015-01-23' AS Date), N'YALÇIN KAYA')
INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (9, CAST(N'2015-01-27' AS Date), N'MURAT BAL')
INSERT [dbo].[PERSONEL] ([IND], [TARIH], [adi]) VALUES (10, CAST(N'2015-01-28' AS Date), N'MURAT BAL')
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Re: Tablo Karşılaştırma

Mesaj gönderen Opt2000 »

Merhaba,

İlk mesajda verdiğiniz örnekte sorun var.

- 06.01.2015 tarihi hem birinci, hem de ikinci tabloda olmasına rağmen çıktıda gösteriliyor.
- Çıktıda gösterilen ASE 02.02.2015 kaydı iki tabloda da yok (yazım yanlışı mı diye düşündüm, ama 02.01.2015 kaydı her iki tabloda da var.

Sizin sorunuza göre benim anladığım çıktıdaki sadece iki satırın doğru olduğu (aslında kısmen doğru, açıklaması aşağıda):
ASE 04.01.2015
ASE 05.01.2015

Bu karışıklığı giderdikten sonra anlamamız gereken bir iki şey daha var:
1. Eğer birinci tablo dediğiniz Tarihler tablosu ise, birinci tabloda olan, ama ikinci tabloda olmayan kayıtlarda biz "adi" alanını nasıl seçeceğiz. Sonuçta kayıt yok :)
2. Eğer birinci tablo Tarihler tablosu ise ve çıktıda Adi gerekmiyorsa o zaman aşağıdaki sorgu olayı basitçe çözüyor:
SELECT * FROM tarihler WHERE tarihler.tarih NOT IN (SELECT personel.TARIH FROM personel)
3. Eğer istediğiniz personelin, tarihler tablosunda olmayan kaydını bulmaksa bu iki tablodan sonuç çıkmaz. Bize yazmadığınız bir takım bilgiler olmalı. Örneğin her kişi için mutlaka bir tarih olacak, her kişi için bir tarihten sadece bir tane olacak, tarih tablosunda olmayan kayıt personel tablosunda da olmayacak vs. Bu veya buna benzer kurallardan bahsedecek olursanız o zaman sonuç çıkabilir.

Anladığım kadarıyla buradan çıkacak sonuç kodla toparlanacak. Bu da veri tabanı tasarımında bir sorun olduğu şüphesini uyandırıyor (örneklere göre normalizasyon bozuk, ama örnek olduğu için önemsemiyorum). Bu yüzden tasarımı gözden geçirmeniz iyi olacaktır.

Bence soruyu buraya biraz daha detaylı yazın ve örnekleri biraz daha güzel seçin.

İyi çalışmalar
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Tablo Karşılaştırma

Mesaj gönderen denizfatihi »

Benim sorgu biçimim

Kod: Tümünü seç

select A.SICILT,A.ADI_SOYADI,A.TARIH, B.SICIL, B.KULLATARIH from DENK_TURNIKE A
left outer join DENKIZINHAR  B on B.SICIL=A.SICILT AND B.KULLATARIH=A.TARIH
order by 1
[code]
Cevapla