none
Çok Karmaşık bir sql sorgu

    Soru

  • sehirler     Ulkeler
    ID              ID       
    Adi             Adi
    UlkeID

    Yukarıda görüldüğü üzere şehirlerle ülkeler birbirine bağlı

    Urunler            Musteriler
    ID                     ID
    Adı                    Ad
    CikisSehirID      CikisSehirID
    VarisSehirID     VarisSehirID

    Soru 1- ürünler tablosunu şu şekilde nasıl listeleyebiliriz.  ID, Adı, CikisSehirID, CikisSehirAdi, VarisSehirID, VarisSehirAdi

    Soru 2- ürünler tablosuna yeni bir girişolduğunda musteriler tablosundaki uygun ülkede olanlar listelensin. Yani ürünlere çıkış yeri ankara, varış yeri istanbul olan giriş olduğunda, müşteriler tablosunda ki türkiye ülkesine kayıtlı olanlar listelensin.

    Bu sorgular nasıl yazılabilir.

            
    11 Haziran 2012 Pazartesi 17:30

Yanıtlar

  • 1)

    select t1.ID, t1.Adi, 
      t1.CikisSehirID, t2.Adi as CikisSehirAdi,
      t1.VarisSehirID, t3.Adi as VarisSehirAdi
    from Urunler t1
      inner join Sehirler t2 on t1.CikisSehirID = t2.ID
      inner join Sehirler t3 on t1.VarisSehirID = t3.ID

    2) Burada imkansiz bir sey istiyorsun gibi geldi. Ya da yapmak istedigini yanlis anlatmissin (musterilerin ulke kaydi yok). Onun yerine Cikis/Varis yeri ayni ulke olanlarin urun ID ve UlkeID'leri:
    select t1.ID, t2.UlkeID
    from Urunler t1
    inner join Sehirler t2 on t1.CikisSehirID = t2.ID
    inner join Sehirler t3 on t1.VarisSehirID = t3.ID
    where t2.UlkeID = t3.UlkeID
    Not: Bu sorgular nerede kullanilacak? Ornegin C#'ta kullanacaksan, karmasik SQL ogrenmek yerine basitce Linq kullanabilirsin.
    13 Haziran 2012 Çarşamba 10:22

Tüm Yanıtlar

  • Merhaba,

    aşağıdaki gibi bir sorgu yazılabilir.

    SELECT * FROM Musteriler M 
    	INNER JOIN Sehirler S ON (S.Id=M.CikisSehirId OR S.Id=M.VarisSehirId)
    WHERE S.UlkeId IN (
    	SELECT S.UlkeId FROM Sehirler S INNER JOIN Urunler U ON (S.Id=U.CikisSehirId OR S.Id=U.VarisSehirId)
    	WHERE U.ID=@UrunId	
    )


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    12 Haziran 2012 Salı 13:41
  • Merhaba,

    Ahmet arkadaşımızın yanıtı işinizi gördümü? Geri dönüş alabilirsek çok yardımcı olmuş olursunuz ve cevap olumlu ise Yanıt olarak işaretlemeniz burada sorularınıza cevap veren insanları daha da hoşnut kılacaktır ve ilerideki sorularınıza daha bir isteyerek cevap vereceklerdir.

    Teşekkürler


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

    13 Haziran 2012 Çarşamba 06:50
  • 1)

    select t1.ID, t1.Adi, 
      t1.CikisSehirID, t2.Adi as CikisSehirAdi,
      t1.VarisSehirID, t3.Adi as VarisSehirAdi
    from Urunler t1
      inner join Sehirler t2 on t1.CikisSehirID = t2.ID
      inner join Sehirler t3 on t1.VarisSehirID = t3.ID

    2) Burada imkansiz bir sey istiyorsun gibi geldi. Ya da yapmak istedigini yanlis anlatmissin (musterilerin ulke kaydi yok). Onun yerine Cikis/Varis yeri ayni ulke olanlarin urun ID ve UlkeID'leri:
    select t1.ID, t2.UlkeID
    from Urunler t1
    inner join Sehirler t2 on t1.CikisSehirID = t2.ID
    inner join Sehirler t3 on t1.VarisSehirID = t3.ID
    where t2.UlkeID = t3.UlkeID
    Not: Bu sorgular nerede kullanilacak? Ornegin C#'ta kullanacaksan, karmasik SQL ogrenmek yerine basitce Linq kullanabilirsin.
    13 Haziran 2012 Çarşamba 10:22