SQL ifadelerini birleştirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikut

SQL ifadelerini birleştirme

Mesaj gönderen ikut »

Merhaba

Kod: Tümünü seç

SELECT   IRS.A79SIRKOD, IRS.A79IRSYIL, IRS.A79IRSSER, IRS.A79IRSNO, 
         IRS.A79IRSAY, IRS.A79IRSGUN, IRS.A79STKTIP, IRS.A79STKKOD, 
         IRS.A79GCTURU, IRS.A79IRSMIK, IRS.A79IRSFAZ, IRS.A79BOYUT1, 
         IRS.A79BOYUT2, IRS.A79BRMFYT, IRS.A79TOPTUT, IRS.A79ISKTUT, 
         IRS.A79ISSFYT, IRS.A79NETTUT, IRS.A79KDVORN, IRS.A79KDVTUT, 
         IRS.A79IRSBRM, IRS.A79SEVMIK, IRS.A79MSEVMIK, IRS.A79DVZFIY, 
         IRS.A79DVZTUT, IRS.A79MSTKKD, IRS.A79MSTKAD, IRS.A79GSTKTP, 
         IRS.A79GSTKKD, IRS.A79ISKTIP1, IRS.A79ISKORN1, 
        IRS.A79ISKTUT1, IRS.A79ISKHES1, IRS1.A77CARKOD,IRS1.A77SIRKOD,IRS1.A77CARTIP,IRS1.A77SATTUR, IRS1.A77ODMKOD, Space(35) as Carn   
FROM     VSATLIB.IRSHARF IRS 
INNER JOIN VSATLIB.IRSMASF IRS1 ON IRS.A79SIRKOD=IRS1.A77SIRKOD  
      AND IRS.A79IRSSER=IRS1.A77IRSSER AND IRS.A79IRSNO=IRS1.A77IRSNO 
WHERE IRS.A79IRSYIL = 2007 and IRS.A79IRSAY = 2 and IRS.A79IRSGUN =2
Vt tasarımında irsaliye kalemleri var irsaliye başlıkla dosyası var vede müşteri dosyası.
yukardaki sql irsaliye kalemlerini alıyor ve bunu irsaliye başlıkla join edip müşteri nosunuda getiriyor. Ancak vt de tasarım eksikliği olduğundan müşteri adını ayrıca çekmek gerekiyor. Adam irsaliye detayına müşteir kodunu koymamış.

Select A5CARADI as Car FROM VMUHLIB.CARMASF WHERE VMUHLIB.CARMASF.A5CARKOD= '00002' and VMUHLIB.CARMASF.A5CARTIP= 'M' and VMUHLIB.CARMASF.A5SIRKOD= '2')

normal join yaparsam kartezyen çarpıma giriyor. içiçe select ile bunu nasıl yaparım. Örneğin yukardaki sql deki a77carkod alanındaki değere sahip müşteri nosunu carmasf ten bulup gelen birleştirilmiş sql nasıl olmalı.

(NOT ) vt askeri00 te olduğundan dbimage ye uygun notasyon gerekmekte.
saygılar
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Doğrusu onca alanı ekleyip kod kalabalığı yapmanın pek anlamı yoktu. Ayrıca hiç de anlamlı ve okunaklı alan adı verilmemiş. Hangi tablolarda hangi alanlar var anlayamadım :? Elbet anlayan çıkar :wink:

Tablolara anlaşılabilir alias verilebilir. Müşteri kodu irsaliye detay tablosuna değil başlık tablosuna bir kez yazılmalı :idea:

Biraz sadeleştirelim :wink:

Kod: Tümünü seç

SELECT IRS.A79SIRKOD, IRS.A79IRSYIL, ...,
       IRS1.A77CARKOD,IRS1.A77SIRKOD, ...
FROM   VSATLIB.IRSHARF IRS
INNER JOIN VSATLIB.IRSMASF IRS1 ON IRS.A79SIRKOD = IRS1.A77SIRKOD
      AND IRS.A79IRSSER = IRS1.A77IRSSER AND IRS.A79IRSNO = IRS1.A77IRSNO
WHERE IRS.A79IRSYIL = 2007 and IRS.A79IRSAY = 2 and IRS.A79IRSGUN = 2
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ikut

Mesaj gönderen ikut »

recep hocam sorum kısaca şu;

örneğin
personel ve bordro tabloları birbirine sicilno ile join edilirken, ben görevler dosyasından personelin görev koduna görevin adınıda çekmek istiyorum. burada kaztezyen çarpıma giriyor.

bunu nasıl yaparım. gerçi db2 biraz farklı ama çalışan hiç örnek kod yok bulmadım daha doğrusu
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

JOIN lerken bağlayıcı alanı kullanırsan tek gelmesi gerekir. Ana tabloda birden fazla kayıt dönüyorsa personel bilgilerini de tekrarlar. Tam tablo ve alanlar olmayınca kesin bir şey demek zor.. Alanları ve sorguyu yapıştırırsanız bir yolunu bulabiliriz :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ikut

Mesaj gönderen ikut »

rsimsek yazdı:JOIN lerken bağlayıcı alanı kullanırsan tek gelmesi gerekir. Ana tabloda birden fazla kayıt dönüyorsa personel bilgilerini de tekrarlar. Tam tablo ve alanlar olmayınca kesin bir şey demek zor.. Alanları ve sorguyu yapıştırırsanız bir yolunu bulabiliriz :wink:
mrb.
inanmıcaksın ama bu sorun 4 aydan beri başımda bela idi. sonuda çözdüm. bu forumda bir örnek buldum. ondada sen başroldesin.

ben hep dataya inner join yapıyordum. baktım left joinle çakmış kardeşim babalar gibi. bende denedim. tuhaf yazım hatası bile yapmamışım. canavar gibi çalıştı.

Üstelikte, geri kalan adımı manual kodla yazdırdığım koda göre 80-100 kat hızlı çalışıyor.

sorun esasen db2 as400 te. örnegin ben odbc ilse substr kullanabiliyorum ama ole db driveriında aynı kod hata veriyor. ilginç bir durum.

çok sağol illgin için. gene sen çözdün sayılır çünkü. thread eskiydi ama olsun
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Hayrını gör.. Normalde ODBC ve katmalar da sorunları artırabilir. Genelde de acele ile INNER JOIN in veya LEFT JOIN in tam olarak ne yaptığına bakmıyoruz :roll:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla