ard arda left join

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

ard arda left join

Mesaj gönderen Vital »

Merhaba;

arkadaslar soyle bir yapim var ben ikisini birlestirmek istiyorum.

Kod: Tümünü seç

GENELDETAIL1 LEFT JOIN SEVK ON SEVK.GENELDETAILID=GENELDETAIL1.GENELDETAILID LEFT JOIN SEVKDETAIL ON SEVKDETAIL.SEVKID=SEVK.ID 

GENELDETAIL1 LEFT JOIN URETIM1 ON URETIM1.GENDETAILID=GENELDETAIL1.GENELDETAILID LEFT JOIN URETIMDETAIL1 ON URETIMDETAIL1.URETIMID=URETIM1.URETIMID


nasil birlestirebilirim bu iki sorguyu
tskler.
Garibanus
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: ard arda left join

Mesaj gönderen rsimsek »

Sorguyu tam verseydiniz keşke :roll:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: ard arda left join

Mesaj gönderen Vital »

hocam durum soyle;
GENELDETAIL1 adinda bir tablom var uretim ve sevk tabloları master detail geneldetail1 tablosu ile
sevk tablosu ile sevkdetail tablosu masterdetail
dokum ile dokumdetail tablosu master detail

Kod: Tümünü seç

//GENELDETAIL1,SEVK VE SEVKDETAIL ARASINDAKI ILISKI
 IBQuery3.close;
 IBQuery3.SQL.clear;
 IBQuery3.SQL.add('select  GENELDETAIL1.GENELDETAILID');
 IBQuery3.SQL.add(',coalesce((GENELDETAIL1.netkg),0) AS NETKG,GENELDETAIL1.BRUTKG AS BRUT_KG');
 IBQuery3.SQL.add(',COALESCE(SEVKDETAIL.SEVKADETI,0) AS SEVK_ADETI,COALESCE((SEVKDETAIL.SEVKADETI)*(SEVKDETAIL.SEVKNETKG),0) AS TOPLAM_NET_SEVK_EDILEN_KG');
 IBQuery3.SQL.add(',COALESCE((SEVKDETAIL.SEVKADETI)*(SEVKDETAIL.SEVKNETKG)+PALETAGIRLIGI,(SEVKDETAIL.SEVKADETI)*(SEVKDETAIL.SEVKNETKG)) AS TOPLAM_BRUT_SEVK_KG');
 IBQuery3.SQL.add('FROM GENELDETAIL1 LEFT JOIN SEVK ON SEVK.GENELDETAILID=GENELDETAIL1.GENELDETAILID LEFT JOIN SEVKDETAIL ON SEVKDETAIL.SEVKID=SEVK.ID   WHERE SEVKDETAIL.SEVKTARIHI>='''+datetostr(DateTimePicker1.date)+''' AND SEVKDETAIL.SEVKTARIHI<='''+datetostr(DateTimePicker2.date)+'''');
 IBQuery3.open;




//GENELDETAIL1,URETIM1 VE URETIMDETAIL1 ARASINDAKI ILISKI
 IBQuery3.close;
 IBQuery3.SQL.clear;
 IBQuery3.SQL.add('select  GENELDETAIL1.GENELDETAILID');
IBQuery3.SQL.add(',coalesce((GENELDETAIL1.sipadet),0) AS SIP_ADETI,coalesce((GENELDETAIL1.netkg),0) AS NETKG,COALESCE(URETIMDETAIL1.gelenadet,0) AS URETILEN_ADET,COALESCE(URETIMDETAIL1.gelenadet*GENELDETAIL1.BRUTKG,0) as URETILEN_KG');
IBQuery3.SQL.add(',coalesce((GENELDETAIL1.BRUTKG),0) AS BRUT_KG');



   IBQuery3.SQL.add('FROM GENELDETAIL1 LEFT JOIN URETIM1 ON URETIM1.GENDETAILID=GENELDETAIL1.GENELDETAILID LEFT JOIN URETIMDETAIL1 ON URETIMDETAIL1.URETIMID=DOKUM1.URETIMID   WHERE URETIMDETAIL1.GELISTARIHI>='''+datetostr(DateTimePicker1.date)+''' AND URETIMDETAIL1.GELISTARIHI<='''+datetostr(DateTimePicker2.date)+'''');
   

    IBQuery3.open;

ben bunları tekbir sorguda birlestirmek istiyorum.
tskler.
Garibanus
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: ard arda left join

Mesaj gönderen sabanakman »

Direk left joinleri arka arkaya eklemekte bir sorun olmaz.

Kod: Tümünü seç

SELECT * FROM GENELDETAIL1
LEFT JOIN SEVK ON SEVK.GENELDETAILID=GENELDETAIL1.GENELDETAILID
LEFT JOIN SEVKDETAIL ON SEVKDETAIL.SEVKID=SEVK.ID
LEFT JOIN URETIM1 ON URETIM1.GENDETAILID=GENELDETAIL1.GENELDETAILID
LEFT JOIN URETIMDETAIL1 ON URETIMDETAIL1.URETIMID=URETIM1.URETIMID
WHERE .....
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: ard arda left join

Mesaj gönderen rsimsek »

@sabanakman'ın dediği gibi ><join ler öncelik/bağımlılık sırasıyla alt alta yazılabilir. JOIN lemek için aralarında ortak alan(lar) olmalı :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: ard arda left join

Mesaj gönderen Vital »

arkadaslar cok tskler.
Garibanus
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Re: ard arda left join

Mesaj gönderen akuyumcu63 »

merhaba;

aşağıda kullanmış olduğum kod neden çalışmışyor. LEFT OUTER JOIN TBLCARIKAYIT ON TBLCEKKAYIT.VERCARIID = TBLCARIKAYIT.ID satırında hata veriyor.

Kod: Tümünü seç

select * from TBLCEKKAYIT
LEFT OUTER JOIN TBLCARIKAYIT ON TBLCEKKAYIT.ALCARIID = TBLCARIKAYIT.ID
LEFT OUTER JOIN TBLBNKHESAPKAYIT ON TBLCEKKAYIT.VERBANKAID = TBLBNKHESAPKAYIT.ID 
LEFT OUTER JOIN TBLCARIKAYIT ON TBLCEKKAYIT.VERCARIID = TBLCARIKAYIT.ID
where TIPI='M'
order by TBLCEKKAYIT.ID, TBLCEKKAYIT.ALCARITARIH
query i çalşıtırdığım zaman gelen hata mesajı
Dynamic SQL Error
SQL error code=-204
Ambiguous filed name between table TBLCARIKAYIT and table TBLCARIKAYIT.ID

şunu yapmaya çalışıyorum;
grid üzerinde çeki aldığım carinin adı, çeki başka bir çariye yada bankaya verdiysem adları görünsün istiyorum. formda yaptığım araştırmalara göre yapmaya çalışıyorum. henüz tam bir sonuca varamadım. yardımcı olursanız memnun olurum. şimdiden teşekkürler
İsteyen, yapabildiğinden daha fazlasını yapar.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: ard arda left join

Mesaj gönderen sabanakman »

Hata mesajı ip ucu olarak yeterli aslında.
select * from TBLCEKKAYIT
LEFT OUTER JOIN TBLCARIKAYIT ON TBLCEKKAYIT.ALCARIID = TBLCARIKAYIT.ID
LEFT OUTER JOIN TBLBNKHESAPKAYIT ON TBLCEKKAYIT.VERBANKAID = TBLBNKHESAPKAYIT.ID
LEFT OUTER JOIN TBLCARIKAYIT ON TBLCEKKAYIT.VERCARIID = TBLCARIKAYIT.ID
where TIPI='M'
order by TBLCEKKAYIT.ID, TBLCEKKAYIT.ALCARITARIH
Sanırım ikinci TBLCARIKAYIT join ilişkilendirmesi tamamen gereksiz yük oluşturan bir ilişki ve tablo ismi yazarak verdiğiniz şartın, tablolardan hangisine ait olduğu belli olmamaktadır. İkinci yazılan TBLCARIKAYIT join satırını tamamen silebilirsiniz.

Hazır konu açılmışken teknik olarak bir tavsiye. Tablolarınıza takma isim vererek aynı isimli tabloları isim çakışması olmadan kullanabilirsiniz. Hatta birden fazla tablonun yürütüleceği sorgularda takma isim kullanmayı alışkanlık haline getirmelisiniz. Aynı tabloyu ikinci bir sefer kullanmasanız bile bu alışkanlığı edinmenizde fayda olacaktır.
select * from TBLCEKKAYIT as cek
LEFT OUTER JOIN TBLCARIKAYIT as ana ON cek.ALCARIID = ana.ID
LEFT OUTER JOIN TBLBNKHESAPKAYIT as banka ON cek.VERBANKAID = banka.ID
LEFT OUTER JOIN TBLCARIKAYIT as alt ON cek.VERCARIID = alt.ID
where cek.TIPI='M'
order by cek.ID, cek.ALCARITARIH
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
akuyumcu63
Üye
Mesajlar: 386
Kayıt: 02 Tem 2007 09:43

Re: ard arda left join

Mesaj gönderen akuyumcu63 »

tamda bizim forma ne oldu. neden ses seda yok diye düşünüyordum. herhalde bu aralar herkesin işi biraz daha yoğun. Allah herkese hayırlı iş nasip etsin. işini de hayırlı etsin

şaban akman abi çok teşekkür ederim. takıldığımız şeyleri soracak ve cevap alacak başka yerimiz yok sizlerden de ses gelmeyince öyle bekliyoruz.

kolay gelsin,
İsteyen, yapabildiğinden daha fazlasını yapar.
Cevapla