From: | "N(dot) Can KIRIK" <n(dot)can(dot)kirik(at)gmail(dot)com> |
---|---|
To: | Java Notlarım <javanotlarim(at)gmail(dot)com> |
Cc: | pgsql-tr-genel <pgsql-tr-genel(at)postgresql(dot)org> |
Subject: | Re: 3 tablo arasındaki join işleminde koşul kullanmak |
Date: | 2024-09-20 19:01:15 |
Message-ID: | CAJ1wP5=GMGTrf1BXv3MS3cKT2K_qigtcHnFxxKMH+Max7zURmA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-tr-genel |
bu ve benzeri anahtarlama yapılacak bağlantılarda LEFT JOIN'ler yerine her
bağlantı için ayrı ayrı JOIN kullanıp UNION ile sonuç birleştirmek en temiz
ve performanslı yöntem.
örnek olarak
SELECT
m.id,
m.adi,
m.tur_id,
y.id,
y.adi
FROM
malzeme AS m
JOIN tasit AS y ON ( y.id, 1 ) = ( m.yer_ir, m.tur_id)
UNION ALL
SELECT
m.id,
m.adi,
m.tur_id,
y.id,
y.adi
FROM
malzeme AS m
JOIN depo AS y ON ( y.id, 2 ) = ( m.yer_ir, m.tur_id)
UNION ALL
SELECT
m.id,
m.adi,
m.tur_id,
y.id,
y.adi
FROM
malzeme AS m
JOIN geri_donusum AS y ON ( y.id, 3 ) = ( m.yer_ir, m.tur_id)
...
bu şekilde her dallanma kendi içinde en iyi planı seçecek ve hızlı
olacaktır.
On Fri, 20 Sept 2024, 16:22 Java Notlarım, <javanotlarim(at)gmail(dot)com> wrote:
> Merhaba. Öncelikle iyi çalışmalar dilerim.
> 3 ayrı tablom var;
>
> - Malzeme tablosu
> - Taşıt Tablosu
> - Depo Tablosu.
>
>
> Bir malzeme taşıtta veya depoda olabilir. Malzeme tablosunda bunu
> belirtmek için "bulundugu_yer_tur_id" alanı var.
> Örneğin;
>
> - malzeme, taşıtta ise yani bulundugu_yer_turu_id=1 ise
> "tb_tasit" tablosundaki "tasit_plaka" değeri,
> - malzeme, depoda ise yani bulundugu_yer_turu_id=2 ise "tb_depo"
> tablosundaki "depo_ad" değeri
>
> alias bir alana çekmek istiyorum.
>
> select m.malzeme_ad, ( bulunduğu yer ("taşıt plakası" veya "depo adı"
> verisinin listeleneceği ortak alias bir alan) from tb_malzeme m
> LEFT JOIN tb_tasit t on t.id=m. bulundugu_yer_id
> LEFT JOIN tb_depo d on d.id=m. bulundugu_yer_id
>
> Yukarıdaki sorguya if else yapısını eklemem gerektiğini düşünüyorum; yani
> if m.bulundugu_yer_tur_id=1 then LEFT JOIN tb_tasit t on t.id=m.
> bulundugu_yer_id
> or
> if m.bulundugu_yer_tur_id=2 then LEFT JOIN tb_depo d on d.id=m.
> bulundugu_yer_id
> ama başaramadım.
> Bu konuda yardımcı olursanız çok sevinirim.
>
> Malzeme tablosu
> CREATE TABLE public.tb_malzeme
> (
> id smallserial NOT NULL,
> malzeme_ad text,
> bulundugu_yer_turu_id smallint,
> bulundugu_yer_id smallint,
> PRIMARY KEY (id)
> );
>
> Taşıt Tablosu
> CREATE TABLE public.tb_tasit
> (
> id smallserial NOT NULL,
> tasit_plaka text,
> PRIMARY KEY (id)
> );
>
> Depo tablosu
> CREATE TABLE public.tb_depo
> (
> id smallserial NOT NULL,
> depo_ad text,
> PRIMARY KEY (id)
> );
>
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Ender Uygun | 2024-09-21 06:34:42 | Re: 3 tablo arasındaki join işleminde koşul kullanmak |
Previous Message | Alpaslan AKDAĞ | 2024-09-20 14:04:27 | Re: 3 tablo arasındaki join işleminde koşul kullanmak |