Delphi de SQL ile tabloları sanal olarak birleştirme...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Delphi de SQL ile tabloları sanal olarak birleştirme...

Mesaj gönderen MicroChip »

mesela
A,B,C,D diye dört tablomuz var
biz bunları A-->B-->C-->D olarak bağlayabiliyoruz koşula bağlı olarak fakat
A-->B A-->C A-->D olarak nasıl bağlanıyor bunu yapamadım. Denediğim SQL komutu da bu:

select * from
arkadas a left outer join boncuk b on a.alan_kod = b.alan_kod

bu sekilde soldaki tabloya sağdaki tablonun uyan kayıtları ekleniyor. Fakat bunu daha fazla tablo için yapamadım.

birde şu şekilde denedim:

select * from
arkadas a inner join boncuk b on a.alan_kod = b.alan_kod,
arkadas a inner join boncuk b on a.alan_kod1 = c.alan_kod

fakat böyle yaptığımda da a ile b nin uyan kayıtları birleştiriliyor c tablosu da saçmalıyo. Ben içinden çıkamadım

Yardımcı olursanız sevinirim. Acele cevaplarınızı bekliyorum.
Saygılarımla...
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Gayet mantıklı uymayan kayıtlar ayrı bir kayıt olarak gösterilecektir.
veritabanı olarak ne kullanıyorsunuz bilmiyorum ama düşündüğünüz şeyi view leri kullanrak gerçekleştirebilirsiniz...
Sevgiler...
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

sair yazdı:Gayet mantıklı uymayan kayıtlar ayrı bir kayıt olarak gösterilecektir.
veritabanı olarak ne kullanıyorsunuz bilmiyorum ama düşündüğünüz şeyi view leri kullanrak gerçekleştirebilirsiniz...
Sevgiler...
diyorsun saircigim saol ama view nasıl kullanılıyo bir örnek verseydin bari :)

bu arada soruma daha iyi anlaşılması için ek olarak şunu söyleyebilirim:
A tablosu ana tablo bu tabloda ID ler tutuluyo B,C,D tabloları da alt tablolar...

Saygılarımla
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Aşağıdaki select cümlesi bir projemde Interbase 6 üzerinde çalışan bir koddur. Tam olarak dedğinizi işi yapmakta Müşteri tablosundan diger bir takim tablolara joinler....

Kod: Tümünü seç

Select * 
From MUSTERI M LEFT JOIN SEHIR SE on M.EV_ULKE_NO=SE.ULKE_NO and M.EV_SEHIR_NO=SE.SEHIR_NO
LEFT JOIN ILCE IE on M.EV_ULKE_NO=IE.ULKE_NO and M.EV_SEHIR_NO=IE.SEHIR_NO and M.EV_ILCE_NO=IE.ILCE_NO
LEFT JOIN SEMT SME on M.EV_ULKE_NO=SME.ULKE_NO and M.EV_SEHIR_NO=SME.SEHIR_NO and M.EV_ILCE_NO=SME.ILCE_NO and M.EV_SEMT_NO=SME.SEMT_NO
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Ok çok teşekkür ederim.

Bu kodu deniyecem (aslında bunları denemiştim ama bu kodda 'outer' yok onun için deniyecem) ha unutmadan interbase de çalışmış bakalım ado da çalışacakmı?
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Fahrettin Bey sizin dediğiniz gibi zaten yapmıştım demiştim ya sadece bende outer fazlaydı.
Şimdi sizin dediğiniz komutu tekrar uyguladım ama çalıştıramadım. Ado kullanıyorum. adoquery sql de (Sözdizimi hatası diyo).

join <tablo> on <belirteç> ten sonra virgül koyuyorum yine çalışmıyo.

Yardımlarınız için teşekkür ederim
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
NightFlight
Üye
Mesajlar: 43
Kayıt: 19 Haz 2003 12:26

Mesaj gönderen NightFlight »

hangi veri tabanını kulanıyorsun
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Veritabanı olarak şu anda Access kullanıyorum. Veritabanına erişmek için ise ADO.

Yapmaya çalıştığım şey şu:

"plansnf" tablosundaki kayıt şöyle :
**********************************************************************
snf_kod tarih ders1 ders2 ders3 ders4 ders5
------------- ------- ----------- ---------- ----------- ----------- -----------
00001 01.10.2003 0001 0001 0003 0002 0004
00002 02.10.2003 0003 0003 0001 BOŞ BOŞ
00003 03.10.2003 0002 0002 0001 0001 0003
**********************************************************************

"dersler" tablosundaki kayıtlarım da
******************************************
ders_kod ders_adi
----------------- --------------------
0001 Türkçe
0002 Matemetik
0003 Coğrafya
0004 Tarih
******************************************

ben plansnf tablosunda görünen sayıların dersler tablosundaki karşılıklarını görmek istiyorum.
bu işi "where" de yaptığım zaman;

select *
from plansnf p1, dersler d1, dersler d2, dersler d3, dersler d4, dersler d5
where
(p1.snf_kod='00001') and
(p1.ders01=d1.ders_kod) and
(p1.ders02=d2.ders_kod) and
(p1.ders03=d3.ders_kod) and
(p1.ders04=d4.ders_kod) and
(p1.ders05=d5.ders_kod)

SQL komutunu uyguladığımda ise "02.10.2003" tarihli kayıt görünmüyo çünkü eşleşen kayıt yok.

bunu ortadan kaldırmak için "left outer join" komutunu kullanmak istiyorum bu tam istediğimi de yapıyo

select *
from plansnf p1
left join dersler d1 on (p1.ders01=d1.ders_kod)
left join dersler d2 on (p1.ders02=d2.ders_kod)
where
(p1.snf_kod='00001')

bunu yaptığımda da yazım hatası diyo.
Bunu nasıl yaparım bilen varmı veya nerede hata yapıyorum.
Saygı ve Sevgilerimle...
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

SELECT plansnf.Snf_kod , Plansnf.tarih , d1.Ders_adi AS " Ders1", d2.Ders_adi AS " Ders2",d3.Ders_adi AS " Ders3", d4.Ders_adi AS " Ders4",d5.Ders_adi AS " Ders5"
from plansnf p1, dersler d1, dersler d2, dersler d3, dersler d4, dersler d5
where
((p1.ders01=d1.ders_kod) or (p1.ders01 is null) ) and
((p1.ders02=d2.ders_kod) or (p1.ders02 is null)) and
((p1.ders03=d3.ders_kod) or (p1.ders03 is null)) and
((p1.ders04=d4.ders_kod) or (p1.ders04 is null)) and
((p1.ders05=d5.ders_kod) or p(1.ders05 is null))

olursa null alanlarıda kabul etmiş olur. Ve kayıtlarda düzene girmiş olur.(inşallah:) )
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Arkadaşlar hepinize teşekkür ederim. Bu kod azmimden kurtulamadı ve sonunda çözdüm nete girmişken sizinle de paylaşmak istedim.

Sevgi ve saygılarımla

Kod: Tümünü seç

select * 
from ((plansnf p1 
left join dersler d1 on p1.ders01=d1.ders_kod) 
left join dersler d2 on p1.ders02=d2.ders_kod)
left join dersler d3 on p1.ders03=d3.ders_kod
where 
(p1.snf_kod='00001') 
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Cevapla