PDA

View Full Version : سوال در مورد مشکل درjoin 3 جدول



نیما حتمی
شنبه 25 آبان 1392, 18:17 عصر
با سلام

دوستان من سه تا جدولمو به هم join کردم ولی در گرفتن خروجی اررور نمیده ولی بعضی از رکوردهای جدولمو 2 بار تکرار میکنه
این دستوری که نوشتم:

SqlDataAdapter insert = new SqlDataAdapter(@"select MaliRecieve.shgh as [ش قرارداد],MaliRecieve.FamilyM as [نام مسافر],MaliRecieve.Nametor as [نام تور],customer.dateharekat as [تاریخ حرکت],customer.Count as تعداد,CardtoCard.Malirecieve as مبلغ ,MaliRecieve.TypeRecieve as [نوع دریافت],cardtocard.ShPeygiri as [ش پیگیری] From MaliRecieve inner join cardtocard on malirecieve.shgh=cardtocard.shgh inner join customer on customer.shgh=malirecieve.shgh where Customer.typePassenger='true' And " + conditions, connect);
واینم نحوه نمایش :
112873

اساتید عزیز چیکار کنم.خیلی گیرم کمکم کنین

hamid_hr
شنبه 25 آبان 1392, 18:34 عصر
بنويس
select distinct ........

نیما حتمی
شنبه 25 آبان 1392, 18:36 عصر
نوشتم جواب نداد
آخه اصلا تو دیتا بیسو که میبینم تکراری وجود نداره که این شکلی داره نشون میده

خیلی عجیبه

danialafshari
شنبه 25 آبان 1392, 19:37 عصر
سلام
چرا از As برای فارسی کردن نام ستون ها استفاده می کنید؟
کوئری رو درون view خودتون تست متوجه میشید

نیما حتمی
یک شنبه 26 آبان 1392, 08:26 صبح
برای نمایش نام ستونها از As استفاده می کنم

تست کردم همون طوریه

نیما حتمی
یک شنبه 26 آبان 1392, 08:36 صبح
راه دیگه ای هم برای نمایش فارسی نام ستونها هست اگه هست بگین لطفا.دانیال جان تست کردم همون طوریه

danialafshari
یک شنبه 26 آبان 1392, 09:01 صبح
سلام
همونطوری یعنی تو view هم تکراری میاره؟
دیتابیست رو بزار

نیما حتمی
یک شنبه 26 آبان 1392, 09:38 صبح
اره همون طوریه
اتچ نمیشه فایل sql ام
آدرس ایمیل بده ایمیل کنم

rayson
یک شنبه 26 آبان 1392, 09:59 صبح
سلام ،
برای فارسی نشون دادن ستون دیتا گرید .
به عنوان مثال شما کد:
MaliRecieve.shgh as [ش قرارداد]
را به :
MaliRecieve.shgh as m_shgh
و بعد در جدول دیتا گرید نام به فارسی تغییر بده
dgv.columns["m_shgh"].headertext="ش قرارداد";

اینو بگم که به احتمال فراوان مشکل شما این هم نیست ، شما ، اگر تصویری از داده های هر جدول هم قرار بدید ممنون میشم .

نیما حتمی
یک شنبه 26 آبان 1392, 11:01 صبح
دوستان من تعداد سطرای اطلاعاتی جداولم درسته ولی وقتی اومدم Join زدم بین این سه تا جدول اومده بعضی از رکوردها رو 4 تا نشون داده.الان که اومدم بررسی میکنم میبینم در جدول malirecieve اون سطرایی که ویرایش شدنو اومده در join چهار سطرش کرده و نشون میده

nafisehk
یک شنبه 26 آبان 1392, 11:06 صبح
مگه رو همون رکورد ویرایش نمیشن؟
مقادیر قبلی نگه میدارید؟

rayson
یک شنبه 26 آبان 1392, 11:12 صبح
دوستان من تعداد سطرای اطلاعاتی جداولم درسته ولی وقتی اومدم Join زدم بین این سه تا جدول اومده بعضی از رکوردها رو 4 تا نشون داده.الان که اومدم بررسی میکنم میبینم در جدول malirecieve اون سطرایی که ویرایش شدنو اومده در join چهار سطرش کرده و نشون میده
دوست عزیز شما به احتمال زیاد مشکل Cross Join دارید:
نوعی ار الحاق (join) که گاهی تحت نام الحاق ضربدری هم شناخته میشه .
در این نوع از Join اگر جدول اول X رکورد و دومی Y رکورد داشته باشد نتیجه Cross Join تعداد X * Y رکورد میشود .
به لینک زیر یک سر بزنید :
http://en.wikipedia.org/wiki/Join_%28SQL%29
شما برای رفع این مشکل میتونید برای هر join یک Group by تعریف کنید که احتمال زیاد این مشکل رفع خواهد شد.

نیما حتمی
یک شنبه 26 آبان 1392, 13:22 عصر
دوست عزیز دستور group by رو مینویسم اررور میده.کجای دستورم بنویسم.دستورمو تو تایپیک اولم نوشتم

نیما حتمی
یک شنبه 26 آبان 1392, 14:42 عصر
کسی نیست کمک کنه چطور در دستورم که در تایپیک 1 نوشتم از دستور group by بعد از هر join استفاده کنم؟

rayson
یک شنبه 26 آبان 1392, 14:48 عصر
کسی نیست کمک کنه چطور در دستورم که در تایپیک 1 نوشتم از دستور group by بعد از هر join استفاده کنم؟

بعد از دستور Where کد Group by اضافه کنید:
مثل:
Group by tbl_name.column_name
tbl_name = نام جدول
column_name = نام ستون
اگر با خطایی مواجه شدید لطفا پیغام خطا قرار بدید

نیما حتمی
یک شنبه 26 آبان 1392, 15:40 عصر
112926
این اررورو میده

نیما حتمی
یک شنبه 26 آبان 1392, 15:43 عصر
"select MaliRecieve.shgh as [ش قرارداد],MaliRecieve.FamilyM as [نام مسافر],MaliRecieve.Nametor as [نام تور],customer.dateharekat as [تاریخ حرکت],customer.Count as تعداد,CardtoCard.Malirecieve as مبلغ ,MaliRecieve.TypeRecieve as [نوع دریافت], CardtoCard.ShPeygiri as [ش پیگیری] From MaliRecieve inner join customer on malirecieve.shgh=customer.shgh inner join cardtocard on cardtocard.shgh=malirecieve.shgh where Customer.typePassenger='true' And " + conditions
این دستورمه کجاش بنویسم

نیما حتمی
یک شنبه 26 آبان 1392, 15:58 عصر
مرسی که وقت میزاری ولی دستور منو درست ندیدی دوست عزیز من در آخر از And + condition استفاده کردم
یعنی از شروط ترکیبی استفاده کردم
واسه همینه که نمیدونم کجا از group by استفاده کنم چون از نظر دستوری هر جا بنویسی در دستور من اررور میده

rayson
یک شنبه 26 آبان 1392, 16:06 عصر
مرسی که وقت میزاری ولی دستور منو درست ندیدی دوست عزیز من در آخر از And + condition استفاده کردم
یعنی از شروط ترکیبی استفاده کردم
واسه همینه که نمیدونم کجا از group by استفاده کنم چون از نظر دستوری هر جا بنویسی در دستور من اررور میده
condition موجود در کد چه شرطی را اضافه میکنه ؟

نیما حتمی
یک شنبه 26 آبان 1392, 16:24 عصر
condition براساس شرایطی که کاربر تعیین میکنه در بعد از where میاد و دستور سلکت من براساس اون شرایط عمل میکنه



string conditions = "1=1";
if (checkBox1.Checked == true)
{
conditions += "and cardtocard.namebank='" + NameBank.Text + "' ";
}
else
{
checkBox1.Checked = false;
}
if (checkBox4.Checked == true)
{
conditions += "and customer.dateharekat='" + DateHarekat.Value.FarsiSelectedDate + "' ";
}
else
{
checkBox4.Checked = false;
}
if (checkBox5.Checked == true)
{
conditions += "and MaliRecieve.Nametor='" + nametor.Text + "' ";
}
else
{
checkBox5.Checked = false;
}

rayson
یک شنبه 26 آبان 1392, 16:33 عصر
اینم تست کن :
where Customer.typePassenger='true' And " + conditions +"group by tbl_name.column_name"

نیما حتمی
یک شنبه 26 آبان 1392, 16:46 عصر
این روشارو تست کردم قبلا درست نمیشه.

واقعا مشکل کجاست؟چطوری حل میشه این مشکل؟دارم دیونه میشم

aslan
یک شنبه 26 آبان 1392, 17:18 عصر
سلام
اگه براتون امکان داره چند رکورد از جدولهاتونو بزارید