Şimdi Ara

3 tablo arası sql sorgusu beceremedim :(

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
14
Cevap
0
Favori
946
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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







  • ö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




  • 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
  • /*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




  • 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.
  • 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
  • tablo görüntüleri burda bakınız
  • 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?
  • 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.
  • hocam çok sağol hemen deneyeceğim
  • denemenın sonucunu buraya yazarsan sevınırım.
  • 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
  • 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)




  • 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.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.