none
Union sorunu RRS feed

  • Soru

  • Arkadaşlar bu union ile problem çekiyorum şöyle

    iki farklı tablodan isimleri çekicem bu tabloların ikisindede kimlikno,adisoyadi,cinsiyeti,medenidurum var sorgum şu şekilde

     sorgu = "SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum FROM  tbl_anapersonel WHERE tbl_anapersonel.aktif=1 UNION SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum FROM  tbl_ailefert WHERE tbl_ailefert.aktif=1";

    buraya kadar sıkıntı yok daha sonra dropdown ile cinsiyeti erkek olanları sorgulatıcam mesela

    Dropdown da erkek seçtim ve ara düğmesine bastım

    if (DropCinsiyet.SelectedValue != "")
            {
                           sorgu += " AND cinsiyeti ='" + DropCinsiyet.SelectedValue + "' ";
            }

    bunun neticesinde tbl_ailefert tablosunda erkek olanları seçerken tbl_anapersonelde filtreleme yapmadan erkek kadın ne varsa çekiyor

    4 Mayıs 2016 Çarşamba 08:46

Yanıtlar

  • arkadaşlar tamamdır sorunu çözdüm egerki aynı problemi yaşayan arkadaşlar olursa 

      sorgu = "SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM  tbl_anapersonel WHERE    tbl_anapersonel.aktif=1 ";
            sorgu2 +=" UNION ALL SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM tbl_ailefert  WHERE tbl_ailefert.aktif=1 ";

    dropdown ile gelecek filtreleme için ise

     sorgu += " AND cinsiyeti =@cinsiyeti " + sorgu2 + " AND cinsiyeti =@cinsiyeti ";

    yaptıgınız zaman önce birinci tabloyu sonra ikinci tabloyu filtreleyip tek bir listede veriyor.

    Zaman ayırıp cevap veren bize ilham veren arkadaşlara teşekkürler

    Bu kadar karışıklığa gerek yok aşağıdaki daha sade bir örnek,

    string sql = @"
    SELECT T.* FROM 
    (
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,Aktif From Table1
       Union All
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,Aktif From Table2
    ) AS T
    WHERE T.Aktif = 1 And T.Cinsiyeti = @cinsiyet";


    oguzkurtcuoglu.com


    4 Mayıs 2016 Çarşamba 11:52

Tüm Yanıtlar

  • Öncelikle veritabanını kullanıcıya teslim etmişsin. Artık SQL Injection gibi basit açıkları bırakmayalım. Parametre kullanalım kullandıralım.

    UNION'ın sağ tarafındaki tabloyu süzüyorsun sadece. Sol tarafa cinsiyet ile ilgili bir şey eklememişsin. 


    4 Mayıs 2016 Çarşamba 09:43
    Moderatör
  • Şu an windows platformunda olmadığım için deneyemiyorum ama iki farklı tablodan çektiğin için olabilir.

    Bunun yerine cinsiyet sütununu kullanarak "inner join" ile birleştirip deneyebilir misin?

    4 Mayıs 2016 Çarşamba 09:45
  • eyvallah parametreli olarak değiştirdim. bu arada sol taraftada cinsiyet var.

     cinsiyetin haricinde daha bir çok degere göre çoklu arama yapıcam.

    peki nasıl yazıcam bu iki tabloyu birleştirme ve iki tablodan istege göre sorgulatmayı."UNION'ın sağ tarafındaki tabloyu süzüyorsun sadece" solu nasıl süzücem bu union illetiyle.

    4 Mayıs 2016 Çarşamba 10:16
  • bu iki tabloyu ilişkisiz düşün hocam yazdıgım sorgu ile ne aratırsam iki tablodada süzüp hepsini toplayıp tek bi listede getirsin.inner join ile illa bişeylerini baglamam gerekiyor ben baglamadan yapmak istiyorum union bu konuda iyi ama işte olmadı
    4 Mayıs 2016 Çarşamba 10:19
  • arkadaşlar tamamdır sorunu çözdüm egerki aynı problemi yaşayan arkadaşlar olursa 

      sorgu = "SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM  tbl_anapersonel WHERE    tbl_anapersonel.aktif=1 ";
            sorgu2 +=" UNION ALL SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM tbl_ailefert  WHERE tbl_ailefert.aktif=1 ";

    dropdown ile gelecek filtreleme için ise

     sorgu += " AND cinsiyeti =@cinsiyeti " + sorgu2 + " AND cinsiyeti =@cinsiyeti ";

    yaptıgınız zaman önce birinci tabloyu sonra ikinci tabloyu filtreleyip tek bir listede veriyor.

    Zaman ayırıp cevap veren bize ilham veren arkadaşlara teşekkürler

    4 Mayıs 2016 Çarşamba 11:08
  • arkadaşlar tamamdır sorunu çözdüm egerki aynı problemi yaşayan arkadaşlar olursa 

      sorgu = "SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM  tbl_anapersonel WHERE    tbl_anapersonel.aktif=1 ";
            sorgu2 +=" UNION ALL SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM tbl_ailefert  WHERE tbl_ailefert.aktif=1 ";

    dropdown ile gelecek filtreleme için ise

     sorgu += " AND cinsiyeti =@cinsiyeti " + sorgu2 + " AND cinsiyeti =@cinsiyeti ";

    yaptıgınız zaman önce birinci tabloyu sonra ikinci tabloyu filtreleyip tek bir listede veriyor.

    Zaman ayırıp cevap veren bize ilham veren arkadaşlara teşekkürler

    Bu kadar karışıklığa gerek yok aşağıdaki daha sade bir örnek,

    string sql = @"
    SELECT T.* FROM 
    (
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,Aktif From Table1
       Union All
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,Aktif From Table2
    ) AS T
    WHERE T.Aktif = 1 And T.Cinsiyeti = @cinsiyet";


    oguzkurtcuoglu.com


    4 Mayıs 2016 Çarşamba 11:52
  • arkadaşlar tamamdır sorunu çözdüm egerki aynı problemi yaşayan arkadaşlar olursa 

      sorgu = "SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM  tbl_anapersonel WHERE    tbl_anapersonel.aktif=1 ";
            sorgu2 +=" UNION ALL SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM tbl_ailefert  WHERE tbl_ailefert.aktif=1 ";

    dropdown ile gelecek filtreleme için ise

     sorgu += " AND cinsiyeti =@cinsiyeti " + sorgu2 + " AND cinsiyeti =@cinsiyeti ";

    yaptıgınız zaman önce birinci tabloyu sonra ikinci tabloyu filtreleyip tek bir listede veriyor.

    Zaman ayırıp cevap veren bize ilham veren arkadaşlara teşekkürler

    Bu kadar karışıklığa gerek yok aşağıdaki daha sade bir örnek,

    string sql = @"
    SELECT T.* FROM 
    (
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,Aktif From Table1
       Union All
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,Aktif From Table2
    ) AS T
    WHERE T.Aktif = 1 And T.Cinsiyeti = @cinsiyet";
    eyvallah hocam bu çok daha iyi oldu.


    4 Mayıs 2016 Çarşamba 12:17
  • arkadaşlar tamamdır sorunu çözdüm egerki aynı problemi yaşayan arkadaşlar olursa 

      sorgu = "SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM  tbl_anapersonel WHERE    tbl_anapersonel.aktif=1 ";
            sorgu2 +=" UNION ALL SELECT kimlikno,adisoyadi,cinsiyeti,medenidurum AS TableName FROM tbl_ailefert  WHERE tbl_ailefert.aktif=1 ";

    dropdown ile gelecek filtreleme için ise

     sorgu += " AND cinsiyeti =@cinsiyeti " + sorgu2 + " AND cinsiyeti =@cinsiyeti ";

    yaptıgınız zaman önce birinci tabloyu sonra ikinci tabloyu filtreleyip tek bir listede veriyor.

    Zaman ayırıp cevap veren bize ilham veren arkadaşlara teşekkürler

    Bu kadar karışıklığa gerek yok aşağıdaki daha sade bir örnek,

    string sql = @"
    SELECT T.* FROM 
    (
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,Aktif From Table1
       Union All
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,Aktif From Table2
    ) AS T
    WHERE T.Aktif = 1 And T.Cinsiyeti = @cinsiyet";
    eyvallah hocam bu çok daha iyi oldu.


    Rica ederim kolay gelsin :)

    Aslında tablo yapınızı da düzeltmek gerekli bence. Union ile birleştirmek yerine bir tane Standart diye tablo yapsanız ve bu kimlikno,adisoyadi gibi alanları yani ortak alanları burada tutsanız ve detayları diğer tabloya yazsanız daha mantıklı gibi. Yani örnek vermek gerekirse;

    Standartlar Tablosu: 
    Id,KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,Aktif
    
    Personel Tablosu : 
    StandartId (Primary key), PersoneleOzelKolon, PersoneleOzelKolon2 ..... vs
    
    AileFertleri Tablosu : 
    StandartId (Primary key), AileFertOzelKolon, AileFertOzelKolon2 ..... vs
    
    


    oguzkurtcuoglu.com



    4 Mayıs 2016 Çarşamba 12:18
  • tşk hocam dediğiniz gibi deniycem

    şunu sormak istiyorum size zahmet

    bu iki tablonun ikisindede ozeldurumid diye bir alan var  sorguda sayı degeri geliyor elbette.ve tbl_ozeldurum tablom var  ben ozeldurumunun adinin gelmesini istiyorum union ile ben bu ozeldurum tablosunu nasıl baglarım  ekledigim zaman All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.  hatasını veriyor

    tbl_ozeldurum tablosu

    ozeldurumid

    ozeldurumadi

    4 Mayıs 2016 Çarşamba 12:39
  • tşk hocam dediğiniz gibi deniycem

    şunu sormak istiyorum size zahmet

    bu iki tablonun ikisindede ozeldurumid diye bir alan var  sorguda sayı degeri geliyor elbette.ve tbl_ozeldurum tablom var  ben ozeldurumunun adinin gelmesini istiyorum union ile ben bu ozeldurum tablosunu nasıl baglarım  ekledigim zaman All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.  hatasını veriyor

    tbl_ozeldurum tablosu

    ozeldurumid

    ozeldurumadi

    Aşağıdaki gibi yapabilirsin,

    SELECT T.KimlikNo,T.AdiSoyadi,T.Cinsiyeti,T.MedeniDurum,O.OzelDurumAdi,T.Aktif FROM 
    (
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,OzelDurumId,Aktif From Table1
       Union All
       Select KimlikNo,AdiSoyadi,Cinsiyeti,MedeniDurum,OzelDurumId,Aktif From Table2
    ) AS T
    LEFT JOIN OzelDurumlarTable As O On T.OzelDurumId = O.OzelDurumId
    WHERE T.Aktif = 1 And T.Cinsiyeti = @cinsiyet";


    oguzkurtcuoglu.com


    4 Mayıs 2016 Çarşamba 12:46
  • sagolasın çok işe yaradı.
    4 Mayıs 2016 Çarşamba 13:02