Arama butonu
Bu konudaki kullanıcılar: 1 misafir
13
Cevap
929
Tıklama
0
Öne Çıkarma
3 tablo arası sql sorgusu beceremedim :(
M
17 yıl
Teğmen
Konu Sahibi

db de 3 tablom var.

tumkayit
bireyse
kurumsal

tumkayitda recid ve login kayitlari var.
bireysel de -> uid , name,lname,city
kurumsalda -> uid,name,lname,firm,city

bireyselin ve kurumsalın uid leri tumkayit tablosunda recid olarak tutuluyor yani öyle bir şey yapılmışki ben bireyseldeki bir kullanıcının loginini ancak bireyselde veya kurumsalda uidiyi tumkayitda recid ye eşitleyerek bulabilirim.

benim günlerdir uğraştığım ve beceremediğim sorgu şu


örnek olarak logini ab ile başlayacak (like 'ab%' kullandım) çek ve bunların recid si bireysel veya kurumsalda uid karşılığı varsa bul ve ona göre eşitse tumkayitdan login, bireyselde ise , name,lname,city kurumsalda ise name,lname,firm,city değerlerini çek.

umarım düzgün anlatmışımdır

tşkler



P
17 yıl
Yüzbaşı

öncelikle;
select recid from tumkayit where login like 'ab%'
ile recid leri cekip notepade kaydet. (çok uzunsa bu selecti tablo yaratarak da kaydedebilirsin.):

create table as
select recid from tumkayit where login like 'ab%'
commit;


daha sonra,

select * from bireysel a, kurumsal b
where a.uid=b.uid and a.uid in (...buraya ilk select'te cektiğin recidleri yazacaksın)


buradan sonra aynı selecti

select a.uid from bireysel a, kurumsal b
where a.uid=b.uid and a.uid in (...buraya ilk select'te cektiğin recidleri yazacaksın)


şeklinde yazıp aldıgın uid leri

select * from tumkayit where recid in (bir usttekı selectten cektıgın uidleri yazacaksın)


şeklinde yazarsan son ve sondan 2 oncekı selectle ıstedıklerını alırsın


Bu mesaja 2 cevap geldi.
M
17 yıl
Teğmen
Konu Sahibi

quote:

Orjinalden alıntı: Paus3Break

öncelikle;
select recid from tumkayit where login like 'ab%'
ile recid leri cekip notepade kaydet. (çok uzunsa bu selecti tablo yaratarak da kaydedebilirsin.):

create table as
select recid from tumkayit where login like 'ab%'
commit;



tablo yaratmam şartmı mysql üzerinde çalışıyorum


Bu mesaja 2 cevap geldi.
D
17 yıl
Teğmen

/*isim tüm query lerde kullanılacak parametre sen istersen bunu storeprocedure üsründe bir */
DECLARE @NAME AS NVARCHAR(50)
SET @NAME = 'b1'

/*sayı değerleri hangi tabloda kayıt olduğunu buluyor*/
DECLARE @COUNTKURUMSAL AS INT
DECLARE @COUNTBIREYSEL AS INT

SELECT @COUNTKURUMSAL = COUNT(*)
FROM tumkayit INNER JOIN
kurumsal ON tumkayit.recid = kurumsal.uidk
WHERE kurumsal.name LIKE @NAME+'%'

SELECT @COUNTBIREYSEL = COUNT(*)
FROM tumkayit INNER JOIN
bireysel ON tumkayit.recid = bireysel.uid
WHERE bireysel.name LIKE @NAME+'%'

/*bulunan değerlere göre kurumsaldan veya bireyselden fieldlar geliyor*/
IF @COUNTKURUMSAL>0 AND @COUNTBIREYSEL = 0
BEGIN
SELECT name, lname, fcode, city
FROM kurumsal
WHERE name LIKE @NAME+'%'
END
IF @COUNTKURUMSAL=0 AND @COUNTBIREYSEL > 0
BEGIN
SELECT name, lname, city
FROM bireysel
WHERE name LIKE @NAME+'%'
END



P
17 yıl
Yüzbaşı

quote:

Orjinalden alıntı: mskocabay

quote:

Orjinalden alıntı: Paus3Break

öncelikle;
select recid from tumkayit where login like 'ab%'
ile recid leri cekip notepade kaydet. (çok uzunsa bu selecti tablo yaratarak da kaydedebilirsin.):

create table as
select recid from tumkayit where login like 'ab%'
commit;



tablo yaratmam şartmı mysql üzerinde çalışıyorum

yok sart degıl.


Bu mesaja 1 cevap geldi.
M
17 yıl
Teğmen
Konu Sahibi

arkadaşlar çok sağolun ama soruyu tam okumamışsınız galiba ben de üç tablo var şöyle düşünün
tumkayitlarda sadece ueyelerin login ve password gibi bilgileri bireysel de ise kulanıcı bilgileri ad,soyad,tel falan eğer kullanıcı kurumsal ise kurumsal tablosunda yazıyor kullanıcı bilgileri ad,soyad,tel vb...

benim yapamadığım şu
formdan kullanıcı adı ile arama yaptığımda bana o kullanıcı adı bireysel tablounda veya kurumsal da olsun bilgilerini çekmek.

tablolar arasındaki bağlantı şu tumkayitlarda recid alanı, bireyseldeki veya kurumsaldaki uid alanını tutuyor


Bu mesaja 1 cevap geldi.
M
17 yıl
Teğmen
Konu Sahibi

P
17 yıl
Yüzbaşı

hocam ılk yazdıgın mesaja gore verdıgım cevap anlattıklarını karsılıyor. neresı yanlıs ya da neresını anlamadın ogrenebılır mıyım?



P
17 yıl
Yüzbaşı

Ya da şöyle gidelim:

BİREYSEL ve KURUMSAL tablolarındaki uid kolonları aynı. tek bir select ile bu iki kolundan tüm verileri getirelim öncelikle:

select * from bireysel a, kurumsal b where a.uid=b.uid

Bu selecteki uidleri almak istersek:

select a.uid from bireysel a, kurumsal b where a.uid=b.uid

Bu select sonucunda diyelim ki 4 tane kayıt geldi. Gelen kayıtlar da (yani uidler de) 5,7,9, 56 olsun.

O zaman tümkayit tablosunda bu uidere karsılık gelen kayıtlar varmı yok mu ona bakarız:

select * from tumkayit where recid in (75,7,9,56)

bu selecetin sonucu boş gelmezse istedigin verileri buradan alırsın. yok boşsa zaten tum kayıtlar ile bıreysel ve kurumsal tablosu uysmuyordur.


Bu mesaja 1 cevap geldi.
M
17 yıl
Teğmen
Konu Sahibi

hocam çok sağol hemen deneyeceğim


Bu mesaja 1 cevap geldi.
P
17 yıl
Yüzbaşı

denemenın sonucunu buraya yazarsan sevınırım.


Bu mesaja 1 cevap geldi.
M
17 yıl
Teğmen
Konu Sahibi

hocam bir şeye daha takıldım


quote:

Orjinalden alıntı: Paus3Break

select a.uid from bireysel a, kurumsal b where a.uid=b.uid

Bu select sonucunda diyelim ki 4 tane kayıt geldi. Gelen kayıtlar da (yani uidler de) 5,7,9, 56 olsun.

O zaman tümkayit tablosunda bu uidere karsılık gelen kayıtlar varmı yok mu ona bakarız:

select * from tumkayit where recid in (75,7,9,56)



burda gelen kayıtları yani select a.uid from bireysel a, kurumsal b where a.uid=b.uid şu satırdan gelen kayıtları bir değişkene atayıp select * from tumkayit where recid in (75,7,9,56) bu sorguda (75,7,9,56)
yerine kullanabilirmiyiz


Bu mesaja 1 cevap geldi.
P
17 yıl
Yüzbaşı

quote:

Orjinalden alıntı: mskocabay

hocam bir şeye daha takıldım


quote:

Orjinalden alıntı: Paus3Break

select a.uid from bireysel a, kurumsal b where a.uid=b.uid

Bu select sonucunda diyelim ki 4 tane kayıt geldi. Gelen kayıtlar da (yani uidler de) 5,7,9, 56 olsun.

O zaman tümkayit tablosunda bu uidere karsılık gelen kayıtlar varmı yok mu ona bakarız:

select * from tumkayit where recid in (75,7,9,56)



burda gelen kayıtları yani select a.uid from bireysel a, kurumsal b where a.uid=b.uid şu satırdan gelen kayıtları bir değişkene atayıp select * from tumkayit where recid in (75,7,9,56) bu sorguda (75,7,9,56)
yerine kullanabilirmiyiz




şöyle yapabilirsin:

select * from tumkayit where recid in (select a.uid from bireysel a, kurumsal b where a.uid=b.uid)


Bu mesaja 1 cevap geldi.
P
17 yıl
Yüzbaşı

poly_users --->login ve passwd
polsy_instution--->uid,fname,lname,city,firm
poly_user_individual--->uid,fname,lname,city


eger id leri eşit olanları bulup poly_users tablosundaki tum bilgileri cekmek istiyorsan:

select * from poly_users where rec_id in (select a.uid from poly_instution a, poly_user_individual b where
a.uid=b.uid)

eger idleri eşit olanları bulup poly_inst ve poly_indivi tablosundaki tüm kayıtları çekmek istiyorsan:

select * from poly_instution a, poly_user_individual b where
a.uid=b.uid and a.uid in (select rec_id from poly_users)


logine göre arama yapmak istiyorsan öncelıkle poly_instutin ve poly_user_indiv tablolarını birleştirmen gerek:

create table TABLO_YENI as
select * from poly_instution a, poly_user_individual b where a.uid=b.uid
commit;

***artık yeni bir tablon var (TABLO YENI)
bu yeni, tablodaki uid alanı ile poly_users tablosundaki recid alanları aynı.
Bundan sonra yapman gereken:

select * from poly_users a, TABLO_YENI b where a.rec_id=b.u_id and a.login like '%xxx%'

sanırım şimdi oldu.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.