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