PDA

View Full Version : سوال!!کوئری بین 4 جدول



SuTeDell
چهارشنبه 18 بهمن 1391, 20:26 عصر
سلام.4تا جدول دارم 1.روز 2.کلاس 3.ثبت نام 4.هنرجو
میخوام روزهای یک هنرجوی خاص که در یک ترم خاص ثبت نام کرده رو select کنم.
روزها به صورت زیر ثبت میشود:
هنرجو ثبت نام میکند و 4روز برایش ثبت میشود(ثبت نام به ازای یک ماه،و هر ماه 4 روز کلاس دارد)
بعد در ماه بعدی که ثبت نام میکند باز 4تا تاریخ جدید برایش ثبت میشود.

select Ruz.Jalase,Ruz.Date,SabteName.Term from Ruz join Kelas on Kelas.Kelas_ID=Ruz.Kelas_ID
join SabteName on SabteName.Kelas_ID=Kelas.Kelas_ID join Student on Student.Student_Code=SabteName.Student_Code
where Student.Name=N'' and Student.Family=N'' and SabteName.Term=N''



جواب کوئری
جلسه تاریخ ترم
1 1391/11/14 اردیبهشت
2 1391/11/21 اردیبهشت
3 1391/11/28 اردیبهشت
4 1391/12/5 اردیبهشت
1 1391/12/12 اردیبهشت
2 1391/12/19 اردیبهشت
3 1391/12/26 اردیبهشت
4 1392/1/3 اردیبهشت


اما 4تا تاریخ اول مربوط به ترم فروردین میشه.پس چرا تو جواب کوئری اونا رو هم میاره؟!!!!!

محمد سلیم آبادی
پنج شنبه 19 بهمن 1391, 07:12 صبح
در جواب query اتان تاریخ سه تاریخ مربوط به برج 11 هستند و یکی مربوط به برج 1؛ احتمالا اون 11 ها باید تبدیل بشه به 1.
شما از این شرط در query اتان استفاده می کنید؟ در این شرط که هیچ چیز لحاظ نشده!

where Student.Name=N'' and Student.Family=N'' and SabteName.Term=N''

شما میتوانید یک داده نمونه مثال بزنین و خروجی مورد نظرتون را بر اساس اون توضیح بدین؟

SuTeDell
پنج شنبه 19 بهمن 1391, 13:45 عصر
سلام.ممنون
اول اینکه میبینید سه تاریخ مربوط به برج 11 هست به این معنی که اولین جلسه شورع کلاس 1391/11/14 است و چون هر ترم 4جلسه است پس تا 1391/12/5 مربوط به یک ترم است(مثلا فروردین)
اما 4 تاریخ بعدی مربوط میشه به ترم مثلا اردیبهشت.
خروجی که من میخوام اینه که تاریخایی که مربوط به یک ترم خاص و هنرجوی خاص میشود را نمایش دهد.اما در کوئری بالا همه تاریخا رو میاره و به ترم توجهی نمیکند.

در شرط where هم به طور مثال نام=علی و فامیلی=امیری و ترم=اردیبهشت میزنم اما کوئری نادرست پست قبلی رو میاره ولی من این کوئری رو میخوام:

1 1391/12/12 اردیبهشت
2 1391/12/19 اردیبهشت
3 1391/12/26 اردیبهشت
4 1392/1/3 اردیبهشت

محمد سلیم آبادی
پنج شنبه 19 بهمن 1391, 21:32 عصر
در شرط where هم به طور مثال نام=علی و فامیلی=امیری و ترم=اردیبهشت میزنم اما کوئری نادرست پست قبلی رو میاره ولی من این کوئری رو میخوام:
query نتیجه درست را بر می گردونه، به این خاطر که اون چهار سطر دوم نیز مربوط میشن به ماه اردیبهشت.
این چهار جلسه که مربوط به دو دوره آموزشی است به چه معناست، آیا یک فرد می تواند در چند دوره که در یک ماه بر گذار می شوند شرکت کند؟
اگر جواب سوال قبلی مثبت باشد شما باید توسط یک مقدار دیگر این دوره ها را از هم متمایز کنید.

به هر حال در این مورد با Top 4 مشکلتون حل خواهد شد. چیزی شبیه به این:

select top 4
Ruz.Jalase,
Ruz.Date,
SabteName.Term
from Ruz join Kelas on Kelas.Kelas_ID=Ruz.Kelas_ID
join SabteName on SabteName.Kelas_ID=Kelas.Kelas_ID join Student on Student.Student_Code=SabteName.Student_Code
where Student.Name=N'' and Student.Family=N'' and SabteName.Term=N''
order by Ruz.Date asc