MS Access SQL: LEFT JOIN

mdagistanli

Altın Üye
Katılım
5 Mayıs 2014
Mesajlar
125
Excel Vers. ve Dili
Excel Pro Plus 2019 TR
Altın Üyelik Bitiş Tarihi
13-05-2026
Merhabalar.
Sentez PDKS uygulamasının parmak izi & kart giriş çıkış saati verilerini, Access üzerinden alıyorum. Okutma yapmayan personeli de görmek istediğim için LEFT JOIN kullanıyorum ama INNER JOIN sonucu geliyor, yani sadece okutma yapan personel listeleniyor.

Sorgum yanlış mıdır?

SQL:
SELECT G.Kartno, P.AD, P.SOYAD, P.GRUB, P.BOLUM, G.Tarih, G.GSaat, G.CSaat
FROM PERSONEL AS P LEFT JOIN Gircik AS G ON P.KRTNO = G.Kartno
WHERE (((G.Tarih)=#5/10/2025#));
Veritabanında isimleri lorem ipsum yaptım ve boyutu 190 KB. Kullanarak bakmak isteyen olursa gönderebilirim.
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,407
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhabalar, tarih koşulu belirttiğiniz için gelmiyor. (g.tarih is null or g.tarih=#5/10/2025#) gibi bir şey olmalı.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
@pitchoute , MS Jet motoru, join koşulunda sabit değeri (tarih) kabul etmez; field olmak zorundadır. Ancak büyük sql server sistemler kabul eder. İlk önerdiğiniz kod çalışmayacaktır; bilginize...

.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Daha yeni, 2-3 ay kadar önce bir ihtiyaçtan yapmaya çalışmıştım, uyarı mesajı ile kabul etmedi. Koftiden tek satırlı bir tablo oluşturup, join işlemine dahil ederek (doğal olarak field durumuna geldi) sorunu çözdüm.

Dediğim gibi; "sqlite" database' i test etmedim (muhtemelen kısıtlama yok) ancak test etttiğim büyük server/client sistemlerde (sql server, postgresql, firebird) böyle bir kısıtlama olmadığı gibi, 2'den fazla tablo olması durumunda parantez kullanma zorunluluğu da yok.

.
 

mdagistanli

Altın Üye
Katılım
5 Mayıs 2014
Mesajlar
125
Excel Vers. ve Dili
Excel Pro Plus 2019 TR
Altın Üyelik Bitiş Tarihi
13-05-2026
Merhaba, şu şekilde;

SQL:
SELECT G.Kartno, P.AD, P.SOYAD, P.GRUB, P.BOLUM, G.Tarih, G.GSaat, G.CSaat
FROM PERSONEL AS P
LEFT JOIN Gircik AS G ON P.KRTNO = G.Kartno AND G.Tarih = #5/10/2025#;
ya da şöyle dener misiniz;

SQL:
SELECT G.Kartno, P.AD, P.SOYAD, P.GRUB, P.BOLUM, G.Tarih, G.GSaat, G.CSaat
FROM PERSONEL AS P
LEFT JOIN Gircik AS G ON P.KRTNO = G.Kartno
WHERE G.Tarih = #5/10/2025# OR G.Tarih IS NULL;
Merhaba, teşekkür ederim ama yine olmadı; ilk sorgu "JOIN ifadesi desteklenmiyor" hatası verdi, ikinci sorgu INNER JOIN gibi çalıştı.
 
Katılım
2 Temmuz 2014
Mesajlar
247
Excel Vers. ve Dili
2021 Türkçe, 64bit
dosyanız olmadığı için pek yardımcı olamayacağım ama bildiğim kadarıyla left/right join kullanırken koşul sorun çıkartıyor, onun yerine önce koşulu sağlayan bir sorgu oluşturup o sorguyu left/right joinde kullanmalısınız.
Not: hatalı olabilirim ama buna benzer bir deneyim olmuştu ancak bu şekilde çözeblmiştim
 
Katılım
2 Temmuz 2014
Mesajlar
247
Excel Vers. ve Dili
2021 Türkçe, 64bit
aşağıdaki gibi alt sorgulu dener misiniz?
SQL:
SELECT G.Kartno, P.AD, P.SOYAD, P.GRUB, P.BOLUM, G.Tarih, G.GSaat, G.CSaat
FROM PERSONEL AS P LEFT JOIN ( select * from Gircik  WHERE (((G.Tarih)=#5/10/2025#))) AS G ON P.KRTNO = G.Kartno ;
 

mdagistanli

Altın Üye
Katılım
5 Mayıs 2014
Mesajlar
125
Excel Vers. ve Dili
Excel Pro Plus 2019 TR
Altın Üyelik Bitiş Tarihi
13-05-2026
aşağıdaki gibi alt sorgulu dener misiniz?
SQL:
SELECT G.Kartno, P.AD, P.SOYAD, P.GRUB, P.BOLUM, G.Tarih, G.GSaat, G.CSaat
FROM PERSONEL AS P LEFT JOIN ( select * from Gircik  WHERE (((G.Tarih)=#5/10/2025#))) AS G ON P.KRTNO = G.Kartno ;
SELECT G.Kartno, P.AD & " " & P.SOYAD AS [Ad SOYAD], P.GRUB, P.BOLUM, G.Tarih, G.GSaat, G.CSaat
FROM PERSONEL AS P LEFT JOIN (select * from Gircik WHERE (((Gircik.Tarih)=#5/10/2025#))) AS G ON P.KRTNO = G.Kartno;

Bu sorgu ile istediğimi aldım hocam teşekkür ederim. :)
 
Son düzenleme:
Katılım
2 Temmuz 2014
Mesajlar
247
Excel Vers. ve Dili
2021 Türkçe, 64bit
Harici bir siteye dosya nızı eklerseniZ inceleyip çözüm bulmaya çalışırız.
G.tarih kısmını sadece tarih olarak değiştirip dener misiniz?
WHERE (((G.Tarih)=#5/10/2025#))) yerine
WHERE (((Tarih)=#5/10/2025#))) yada
WHERE (((Gircik.Tarih)=#5/10/2025#)))
 

mdagistanli

Altın Üye
Katılım
5 Mayıs 2014
Mesajlar
125
Excel Vers. ve Dili
Excel Pro Plus 2019 TR
Altın Üyelik Bitiş Tarihi
13-05-2026
Jet/ACE’in ansi-sql-92 uyumlu motoru SQL View’da ON P.KRTNO = G.Kartno AND G.Tarih = #5/10/2025# ifadesini sorunsuz işler, sadece Access’in Design View parser’ı literal’ı join içinde gördüğünden hata fırlatabiliyor; bu gui kısıtlamasını aşmak için tasarım penceresine takılı kalmadan, View-SQL View’a geçin veya tarih filtresini saved query’de uygulayıp sonrasında LEFT JOIN ile bağlayın, bu sayede hem dış join’in NULL mantığını korur hem de okutma yapmayan personeli eksiksiz görebilirsiniz.
Hocam teşekkür ederim, galiba @halily 'nin verdiği sorguyu kastediyorsunuz, o sorgu ile doğru sonucu aldım. Jet/ACE, ansi-sql gibi terimleri ilk defa duyuyorum, SQL bilgim sıfır.
Tarih şartı koştuğum için olmuyordu, JOIN'i alt sorguda kullanarak aştığımızı anlıyorum.

MS SQL'deki sorgu penceresi Access'te yok, boş sorgu adında sorgu kaydedip sorgularaı orada deniyorum. GUI ve View-SQL konularına bakmam gerekiyor.
 

mdagistanli

Altın Üye
Katılım
5 Mayıs 2014
Mesajlar
125
Excel Vers. ve Dili
Excel Pro Plus 2019 TR
Altın Üyelik Bitiş Tarihi
13-05-2026
Harici bir siteye dosya nızı eklerseniZ inceleyip çözüm bulmaya çalışırız.
G.tarih kısmını sadece tarih olarak değiştirip dener misiniz?
WHERE (((G.Tarih)=#5/10/2025#))) yerine
WHERE (((Tarih)=#5/10/2025#))) yada
WHERE (((Gircik.Tarih)=#5/10/2025#)))
Giriş çıkış verisi olmayanların kart numarası (Gircik.Kartno) gelmiyor.
Dosyayı buraya ve dosya.co'ya yükledim.

dosya.co
 

Ekli dosyalar

mdagistanli

Altın Üye
Katılım
5 Mayıs 2014
Mesajlar
125
Excel Vers. ve Dili
Excel Pro Plus 2019 TR
Altın Üyelik Bitiş Tarihi
13-05-2026
Merhabalar.
Son saatte giriş veya çıkış yapmış olanları nasıl listelerim?
G.Gsaat ve G.Csaat sütunlarının biçimi ss:dd
 
Katılım
2 Temmuz 2014
Mesajlar
247
Excel Vers. ve Dili
2021 Türkçe, 64bit
Her soru için yeni konu açıp gerekli açıklamayı oradan yapmanız daha uygun olur. Açılan yeni konuya gerekli dosyayı ekleyip hangi tablodan hangi verileri olması gerektiğini de örnek dosyadaki veriler üzerinden açıklamanız çözümü bulmayı kolaylaştırır.
İyi çalışmalar
 
Üst