join yardim.

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
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

join yardim.

Mesaj gönderen loribnaczo54 »

Yardımlarınız için şimdiden teşekkürler...

Personel Tablosu = {AHMET, BİROL, HASAN}
[Sertifika Tablosu]
SER_NO,PERS_ADI
============
4,AHMET
5,AHMET
6,AHMET
5,BİROL
6,BİROL
7,BİROL
5,HASAN
8,HASAN
9,HASAN

YANİ;
AHMET = {4,5,6}
BİROL = {5,6,7}
HASAN = {5,8,9}

Olduğuna göre ben şöyle bir sorunun cevabını istiyorum.
Sadece 5,6 sertifikasına sahip olan personeller kimlerdir. Sorgu Sonucunda bana {AHMET,BİROL} demesi gerekiyor, çünkü HASAN 6 sertifikasına sahip değil.
Nasıl bir sorgu çekeceğim yardımcı olursanız, sevirim.

Benim en son yapabildiğim sorgu cümlesi şu :
{
SELECT DISTINCT A.*
FROM PERSONEL A INNER JOIN
SERTIFIKA B ON A.pers_adi = B.pers_adi
WHERE
B.ser_no IN
(SELECT ser_no FROM SERTIFIKA
WHERE ser_no = 5 OR ser_no = 6)
}
En son loribnaczo54 tarafından 28 Nis 2006 05:09 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
1.sorunuzun başlığını değiştirirmisiniz.
(büyük harf olayı) :wink:
2. join in altında

Kod: Tümünü seç

...
INNER JOIN SERTIFIKA B ON 
A.pers_adi = B.pers_adi  and
(b.ser_no=5 or b.ser_no=6)
...
şeklinde çalışması lazım
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

malesef olmadi.

Mesaj gönderen loribnaczo54 »

v.a.s aslangeri
yazmis oldugunuz sql i denemistim bana yine HASAN kaydını gonderiyor.
ama kayıtlarda dikkat edersek HASAN kaydına ait 6 no lu sertifika yok. dolayısıyla sadece BIROL, ve AHMET i döndürmesi lazim. or kullanmadan yapmamız gerekiyor sanki. Fakat and kullandığım takdirdede boş dönüyor...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

or
u
and
yaparsanız olması lazım.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

Mesaj gönderen loribnaczo54 »

or
u
and


derken yazılışını anlayamadım. nasıl yazılması gerekiyor. mesela *** yıldız olan yere nasıl yazmam gerekiyo.

SELECT A.*
FROM t_pers A LEFT OUTER JOIN
t_ser B ON A.pers_no = B.pers_no
WHERE (B.ser_no = 5) *** (B.ser_no = 6)
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Or işinize yaramaz çünkü herhangi birinin olduğu durumda çalışır, and de işinize yaramaz çünkü her ikisinin birden olmasına bakar ki siz her sertifika için ayrı satır tutuyorsunuz. Bence bunun için şöyle bir sql işinizi görür. Ama nekadar hızlı olur orasını bilemiyorum.

Kod: Tümünü seç

SELECT * FROM PERSONEL 
WHERE per_no IN (SELECT per_no FROM SERTIFIKA
                WHERE ser_no = 5) 
AND per_no IN (SELECT per_no FROM SERTIFIKA
                WHERE ser_no = 6)
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

tesekkurler...

Mesaj gönderen loribnaczo54 »

yardimlariniz icin tesekkurler, naile arkadasimizinki sorunumu çözmüş gibi gözüküyor tekrar tesekkurler.
Cevapla