• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

MS Access SQL: LEFT JOIN

mdagistanli

Altın Üye
Katılım
5 Mayıs 2014
Mesajlar
126
Excel Vers. ve Dili
Excel Pro Plus 2019 TR
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.
 
Merhabalar, tarih koşulu belirttiğiniz için gelmiyor. (g.tarih is null or g.tarih=#5/10/2025#) gibi bir şey olmalı.
 
@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...

.
 
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.

.
 
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ı.
 
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
 
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 ;
 
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:
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#)))
 
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.
 
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

Merhabalar.
Son saatte giriş veya çıkış yapmış olanları nasıl listelerim?
G.Gsaat ve G.Csaat sütunlarının biçimi ss:dd
 
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
 
Geri
Üst