Re: 3 tablo arasındaki join işleminde koşul kullanmak

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)
> );
>
>
>
>

In response to

Browse pgsql-tr-genel by date

  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