PDA

View Full Version : سوال: اتصال جدولی با چند فیلد مشابه به جدول دیگر



nima178
جمعه 04 مهر 1393, 18:43 عصر
سلام
آقا شرمنده که مجورم برای همچین موضوعی تاپیک بزنم
دلیل اصلیش اینکه سالها دارم از یک روش استفاده می کنم و اولین باره همچنین مشکلی می بینم
من معمولا برای اطمینان از اتصال جداول از view استفاده می کنم(چون در کریستال ریپورت اونزمان با اتصال جدوال مشکل زیاد داشتیم)
الان یک مشکلی که بر خوردم اینه که
فرض کنید جدولی داریم که توش اطلاعات دانش آموزان رو ثبت می کنیم tblStudent
محل تولد و محل سکونت دانش آموزان در تو فیلد نام های citycode1 و citycode2 به صورت یک عدد ذخیره می شه
جدول دیگری هست که اطلاعات شهرها در اون ذخیره است tblcity مثلا فیلد id کد شهر و فیلد name نام شهر است
حالا می خوام این دو تا جدول رو به هم وصل کنیم:
وقتی همچنین ویوی می سازم
CREATE view myviewStudent (id,citycode1,citycode2) as select stu.id, cit.citycode1,cit.citycode2" & _
"from tblStudent Stu, tblCity cit where stu.citycode1=cit.id"
متاسفانه شهر محل تولد سکونت رو یکی نشون می ده
و اگر اون انتهای کد رو به این صورت اصلاح کنم
"from tblStudent Stu, tblCity cit where stu.citycode1=cit.id and stu.citycode2=cit.id"
تعداد زیادی از داده ها رو نشون نمی ده
کسی می تونه کمک کنه
--
خودم یک راه پیدا کردم و مشکل رو حل کردم اما در واقع صورت مسئله رو پاک کردم
فیلد دیگه ای تعریف کردم که نام شهر رو بر اساس کد تو جدول دانش آموز ذخیره می کنه و دیگه اصلا اتصال جداول لازم نیست
اما من دنبال راه واقعی هستم
ممنون می شم اگر کسی چیزی به ذهنش می رسه بگه

Mahmoud.Afrad
شنبه 05 مهر 1393, 00:44 صبح
from tblStudent Stu, tblCity cit where stu.citycode1=cit.id and stu.citycode2=cit.id


این کوئری فقط رکوردهایی رو سلکت میکنه که شهر محل تولد و شهر محل سکونت یکسانی داشته باشند. چون دارید کدشهر1 و شهر2 جدول دانش آموز رو با کدشهر در جدول شهرها مقایسه میکنید پس اگر هر دو با کد سومی برابر باشند پس هر دو با هم نیز برابرند(a,b هر دو با c برابرند پس a,b با هم نیز برابرند).


یک راه اینه که دو بار نام جدول شهرها رو بیارید ولی به یکی باید نام مستعار بدید.

select TblStudent.name as stuName,
TblCity.name as cityName1,
alias.name as cityName2
from TblStudent, TblCity, TblCity alias
where TblStudent.cityCode1 = TblCity.id
and TblStudent.cityCode2 = alias.id



with cte
as
(
select * from TblCity
)
select TblStudent.name, TblCity.name, cte.name
from TblCity, TblStudent, cte
where TblStudent.cityCode1 = TblCity.id
and TblStudent.cityCode2 = cte.id



select TblStudent.name as stuName,
c.name as cityName1,
d.name as cityName2
from TblStudent
join TblCity c on TblStudent.cityCode1 = c.id
join TblCity d on TblStudent.cityCode2 = d.id

nima178
شنبه 12 مهر 1393, 01:49 صبح
سلام
آقا متاسفانه با نام مستعار هم مشکلی حل نمی شه و باز هم عده ی زیادی از داده ها رو نشون نمی ده:افسرده:

nima178
شنبه 12 مهر 1393, 01:49 صبح
مشکل به طریقی محمود آقا فرمودند حل شد
اشکال در جای دیگری بود