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

Lists: Postg배트맨 토토SQL
From: Java Notlarım <javanotlarim(at)gmail(dot)com>
To: pgsql-tr-genel(at)postgresql(dot)org
Subject: 3 tablo arasındaki join işleminde koşul kullanmak
Date: 2024-09-20 13:22:19
Message-ID: CAG=rH2UTYnp20s+gODdDwrsVPiXQ=sx7tEJJXYyh=nag71QeeQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: Postg배트맨 토토SQL

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: Uygar UZUNHASAN <uuzunhasan(at)nobelyazilim(dot)com>
To: pgsql-tr-genel(at)lists(dot)postgresql(dot)org
Subject: Re: 3 tablo arasındaki join işleminde koşul kullanmak
Date: 2024-09-20 13:32:25
Message-ID: 87f7f535-7e4b-455b-a7ad-13e49fc1c3b5@nobelyazilim.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-tr-genel

Merhaba
Doğrudan için şöyle birşey olabilir:

SELECT ...
CASE WHEN tb_tasit.id IS NOT NULL THEN 'TAŞIT' WHEN tb_depo.id IS NOT
NULL THEN 'DEPO' ELSE 'N/A' END as durum,
COALESCE(tb_tasit.tasit_plaka, tb_depo.depo_ad)
...
FROM tb_malzeme
LEFT JOIN (tb_tasit t on t.id <http://t.id>=m. bulundugu_yer_id AND
m.bulundugu_yer_tur_id=1)
LEFT JOIN (tb_depo d on d.id <http://d.id>=m. bulundugu_yer_id AND
m.bulundugu_yer_tur_id=2)

20.09.2024 16:22 tarihinde Java Notlarım yazdı:
> 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 <http://t.id>=m. bulundugu_yer_id
> LEFT JOIN tb_depo d on d.id <http://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
> <http://t.id>=m. bulundugu_yer_id
> or
> if m.bulundugu_yer_tur_id=2 then LEFT JOIN tb_depo d on d.id
> <http://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)
> );
>
>
>

--
Uygar UZUNHASAN
NOBEL YAZILIM
0532 506 6960


From: İbrahim Sarıçiçek <ibrahimsaricicek(at)gmail(dot)com>
To: Uygar UZUNHASAN <uuzunhasan(at)nobelyazilim(dot)com>
Cc: pgsql-tr-genel(at)lists(dot)postgresql(dot)org
Subject: Re: 3 tablo arasındaki join işleminde koşul kullanmak
Date: 2024-09-20 13:36:52
Message-ID: CA+_N7qKSoQMMfFjPTCDrjmtzxzMcxDTf5X+V6rRdn+NyNtmUkA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-tr-genel

ufak bir googlelama ya da chatgpt yardımı ile pl/pgsql de önerebilirim.

x = select ****
y = select ****

if x = blabla

On Fri, 20 Sept 2024, 16:32 Uygar UZUNHASAN, <uuzunhasan(at)nobelyazilim(dot)com>
wrote:

> Merhaba
> Doğrudan için şöyle birşey olabilir:
>
> SELECT ...
> CASE WHEN tb_tasit.id IS NOT NULL THEN 'TAŞIT' WHEN tb_depo.id IS NOT
> NULL THEN 'DEPO' ELSE 'N/A' END as durum,
> COALESCE(tb_tasit.tasit_plaka, tb_depo.depo_ad)
> ...
> FROM tb_malzeme
> LEFT JOIN (tb_tasit t on t.id=m. bulundugu_yer_id AND
> m.bulundugu_yer_tur_id=1)
> LEFT JOIN (tb_depo d on d.id=m. bulundugu_yer_id AND
> m.bulundugu_yer_tur_id=2)
>
>
> 20.09.2024 16:22 tarihinde Java Notlarım yazdı:
>
> 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)
> );
>
>
>
>
> --
> Uygar UZUNHASAN
> NOBEL YAZILIM
> 0532 506 6960
>
>


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
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: Ender Uygun <enderuygun(at)hotmail(dot)com>
To: Java Notlarım <javanotlarim(at)gmail(dot)com>
Cc: "pgsql-tr-genel(at)postgresql(dot)org" <pgsql-tr-genel(at)postgresql(dot)org>
Subject: Re: 3 tablo arasındaki join işleminde koşul kullanmak
Date: 2024-09-21 06:34:42
Message-ID: PAXP192MB158430440A8F8AAF6DF34062C76D2@PAXP192MB1584.EURP192.PROD.OUTLOOK.COM
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-tr-genel

Selamlar,

Bunu istiyor olabilir misiniz?

select m.malzeme_ad,

case when m.bulundugu_yer_turu_id=1 then t.tasit_plaka
when m.bulundugu_yer_turu_id=2 then d.depo_ad
else ‘malzeme_bulunamadi’ end as malzeme_detay

from tb_malzeme m
LEFT JOIN tb_tasit t on t.id<http://t.id/>=m. bulundugu_yer_id
LEFT JOIN tb_depo d on d.id<http://d.id/>=m. bulundugu_yer_id

Sent from my iPhone.

On 20 Sep 2024, at 15: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<http://t.id>=m. bulundugu_yer_id
LEFT JOIN tb_depo d on d.id<http://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<http://t.id>=m. bulundugu_yer_id
or
if m.bulundugu_yer_tur_id=2 then LEFT JOIN tb_depo d on d.id<http://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: Java Notlarım <javanotlarim(at)gmail(dot)com>
To: pgsql-tr-genel(at)postgresql(dot)org
Subject: Re: 3 tablo arasındaki join işleminde koşul kullanmak
Date: 2024-09-23 08:00:33
Message-ID: CAG=rH2X0n8nT8ogNz95XhaCpnMegxG1DF_YDjXLZNPXuOw7zhA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-tr-genel

Merhaba.
Sevgili Alpaslan AKDAĞ, N.Can KIRIK, Uygar UZUNHASAN, İbrahim Sarıçiçek,
Ender UYGUN
değerli cevaplarınız ve yardımınız için çok teşekkür ederim. Sayenizde hem
sorunumu çözdüm hem de sizlere sormadan önce kendim sorunu çözmeye
çalışırken aldığım syntax hatasının sebebini anladım.
İyi ki varsınız, iyi çalışmalar dilerim.

Java Notlarım <javanotlarim(at)gmail(dot)com>, 20 Eyl 2024 Cum, 16:22 tarihinde
şunu yazdı:

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