PDA

View Full Version : join



hamid1
دوشنبه 23 آذر 1388, 03:16 صبح
من یک نرم افزار تهیه کردم که که دقیقا کاری را که صفحه ایجاد view در sql انجام می دهد را انجام می دهد به این صورت که جداول مورد نظر را add کرده و relation های آنها را ایجاد کرده و تمامی قسمتهای دستور select ازجمله order by و group by و ... را نیز دارد . همانطور که می دانید در sql زمانی که وارد صفحه ایجاد view می شویم در قسمت کد sql عبارت زیر موجود است : select
from
که زمانی که ما جدول ها را در پنجره بالایی آن add می کنیم خود sql با توجه به جدول ها و رابطه های بین آنها query را تکمیل می کند . مثلا اگر ما سه جدول t1,t2,t3 را add کنیم که t1 و t2 با هم relation داشته باشند عبارت زیر ایجاد می شود :
select * from t1 inner join t2 on f1=f2 cross join t3
f1,f2 نام فیلدهایی است که رابطه جداول t1 و t2 بر اساس آنها است .
زمانی که تعداد جداول بیشتری را add می کنیم که ممکن است هر کدام با دیگری relation داشته باشد عبارت sql ایجاد شده شامل inner join ها و crooss join های تو در تو و زیادی است . حال سوال من این است که این عبارت با چه الگوریتمی ایجاد می شود ؟ آیا کسی مطلع است که من را راهنمایی کند که من هم از آن الگوریتم استفاده کنم ؟ خواهش می کنم که کمکم کنید .
زمانی که تعداد جداول کم است و یا اینکه تعداد relation ها کم است مشکلی ندارم و inner join ها و cross join ها را می فهمم و زمانی که تعداد جداول و relation های بین آنها زیاد می شود و طبعا تعداد inner join و cross jion زیاد می شود نمی دانم با چه الگوریتمی آن را در برنامه ام پیاده کنم تا دقیقا همان query را که sql میدهد برنامه من نیز ایجاد کند ؟

AminSobati
دوشنبه 23 آذر 1388, 14:15 عصر
منظورتون از الگوریتم رو متوجه نمیشم. طبعا شما باید از Viewهای سیستمی کوئری بزنین تا متوجه روابط بین جداول بشین. هر وقت یک جدول اضافه میشه، باید اون رو در متن Query معرفی کرد. آیا منظورتون این هست که به چه صورت متوجه بشین این جدول جدید باید کجای متن اضافه بشه، یا برداشت من اشتباهه؟

hamid1
دوشنبه 23 آذر 1388, 15:02 عصر
دقیقا منظورم این است که با اضافه شدن جدول جدید و relation های آن از کجا متوجه شوم که باید کدهای مربوط به آنها کجا اضافه شود

AminSobati
دوشنبه 23 آذر 1388, 16:10 عصر
ساختار دستور Select که مشخص هست. برای قسمت Joinها، شاید بد نباشه یک جدول موقتی در نظر بگیرید که دارای سه-چهار فیلد باشه مثلا اینکه ثبت بشه چه جدولی با چه جدولی Join میشه با چه شرطی. برای تولید قسمت FROM میتونین از این جدول کمک بگیرین

hamid1
سه شنبه 24 آذر 1388, 01:20 صبح
من یک کلاس تعریف کرده ام که داخل آن نام دو جداول و نام فیلدهایی که ارتباط بر اساس آنها است و نوع ارتباط که چند به چند است را داخل آن دارم سوال من در مورد ترتیب inner join ها در مواردی که تعداد جداول و relation ها زیاد است می باشد .