En iyi yanıtlayıcılar
Union sorunu

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
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";
- Yanıt Olarak İşaretleyen Cihan YakarMVP, Moderator 4 Mayıs 2016 Çarşamba 12:10
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.
- Düzenleyen Cihan YakarMVP, Moderator 4 Mayıs 2016 Çarşamba 09:43
-
-
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.
-
-
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
-
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";
- Yanıt Olarak İşaretleyen Cihan YakarMVP, Moderator 4 Mayıs 2016 Çarşamba 12:10
-
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.
-
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
- Düzenleyen Oğuz KURTCUOĞLU 4 Mayıs 2016 Çarşamba 12:23
-
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
-
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";
-