PDA

View Full Version : سوال خیلی سخت در مورد SQL



Iman_a13
دوشنبه 25 آبان 1388, 10:48 صبح
سلام به دوستان حرفه ای
استاد سر کلاس به ما یه مسئله داد گفت هرکی بتونه حل کنه 5 نمره بهش میدم و با این که کن رفتم شروع کردم به فکر کردن ولی به جایی نرسیدم گفتم یه سری به دوستان حرفه ای خودم بزنم و ازشون خواهش کنم که این مسئله رو حل کنن .. ممنون از همتون

مسئله:

یک جدول داریم ( Table ) با سه فیلد به شکل زیر که داده ها تا 100 سطر بعدی به صورت زیر
پر میشوند و از سطر 100 به بعد تا n به صورت مختلف پر میشوند





Code citycode city


رشت 0131 1
تهران 021 2
کرج 0261 3
لاهیجان 0141 4
.
.
.
علی 021 100
حسین 021 101
ایمان 0131 102
رضا 0141 103
.
.
.
N









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




مثلا بعد از اجرای دستور sql باید داشته باشیم:

علی - تهران - 021
حسین - تهران - 021
ایمان - رشت - 0131
رضا - لاهیجان - 0141
.
.
.
لازم به ذکر است این کار با دو table بسیار راحت است مشکل قرار داشتن تمام داده در یک جدول میباشد.
من مشتاقانه منتظر جواب شما دوستان باهوش هستم و حتما جوای خوبی های شما را خواهم داد.

مهدی نان شکری
دوشنبه 25 آبان 1388, 11:02 صبح
با سلام


select City.City,Person.CityCode,Person.City from
(Select * from TABLENAME Where C<100) City Join (Select * From TABLENAME Where C >= 100) Person
on City.CityCode = Person.CityCode

Iman_a13
دوشنبه 25 آبان 1388, 11:17 صبح
با سلام


select City.City,Person.CityCode,Person.City from
(Select * from TABLENAME Where C<100) City Join (Select * From TABLENAME Where C >= 100) Person
on City.CityCode = Person.CityCode



با تشکر از جوابتون ولی من سوال اصلاح کردم اگه میشه مجددا یک نگاهی بهش بندازید و مجدد کدش رو بزارید و اگر امکان داره یه توضیح کوچکی هم در مورد نحوه عملکرد این سورس بزارید من واقعا از شما متشکر م

مهدی نان شکری
دوشنبه 25 آبان 1388, 11:32 صبح
با سلام
آیا فقط C رو به code تبدیل کردین؟


Select City.City,Person.CityCode,Person.City
From (Select * from TABLENAME Where Code<100) City
Join (Select * From TABLENAME Where Code >= 100) Person
on City.CityCode = Person.CityCode

من از جدول شما اطلاعات مربوط به شهر و شخص رو جدا کردم و بعد روی آن ها Join زدم.

محمد سلیم آبادی
دوشنبه 25 آبان 1388, 13:58 عصر
سلام،
در واقع شما نیاز دارید جدول را با خودش join کنید البته با قراردادی که گذاشتید نیاز به فیلتر دارید. و در اصطلاح join جدول با خودش را self join می گییم.
این select query دقیقا همان query است که در پست قبلی وجود دارد ولی بجای derived table از cte(with) استفاده شده است.


;with t1 (code, citycode, city) as
(
select code
, citycode
, city
from [Table]
where code < 100
)
, t2 (code, citycode, name) as
(
select code
, citycode
, city as name
from [Table]
where code >= 100
)
select t1.city,
t1.citycode,
t2.name
from t1
inner join t2
on t1.citycode = t2.citycode

به استادتون از طرف من بگو که اگر می خواهد puzzle طراحی کنه یک سری پیش من بیاد!
بهش بگو puzzle مربوط به set equivalent را حل کنه.

Iman_a13
دوشنبه 25 آبان 1388, 16:06 عصر
سلام،
در واقع شما نیاز دارید جدول را با خودش join کنید البته با قراردادی که گذاشتید نیاز به فیلتر دارید. و در اصطلاح join جدول با خودش را self join می گییم.
این select query دقیقا همان query است که در پست قبلی وجود دارد ولی بجای derived table از cte(with) استفاده شده است.


;with t1 (code, citycode, city) as
(
select code
, citycode
, city
from [Table]
where code < 100
)
, t2 (code, citycode, name) as
(
select code
, citycode
, city as name
from [Table]
where code >= 100
)
select t1.city,
t1.citycode,
t2.name
from t1
inner join t2
on t1.code = t2.code

به استادتون از طرف من بگو که اگر می خواهد puzzle طراحی کنه یک سری پیش من بیاد!
بهش بگو puzzle مربوط به set equivalent را حل کنه.


ممنون از راهنمایتون میشه اینو با select حل کنید که من کم سواد هم بتونم سر کلاس توضیح بدم چون اصلا این چیزایی رو که نوشتین من تا حالا تو عمرم ندیدم :خجالت:
می خوام یه جوری توضیح بدم که 5 نمره رو بگیرم و استاد نتونه دبه کنه :لبخند:
عاشق همتونم

محمد سلیم آبادی
دوشنبه 25 آبان 1388, 16:31 عصر
common table expression یا همون with یک عملگر استاندارد SQL است که در کتاب C.J. Date هم استفاده شده است، و از طرفی with جزئی از Select Statement محسوب می شه پس query که برایتان ارسال کردم یک Select است.
در این جور مواقع که باید یک چیز را به دیگران تفهیم کنید with می تواند درک query را ساده تر کند.

Iman_a13
پنج شنبه 10 دی 1388, 21:38 عصر
آقا از همه دوستانی که به من جواب دادن وسایت بسیار خوب برنامه نویس خیلی ممنونم

عاشق همتونم