ورود

View Full Version : درخواست راهنمایی Left Join Multi Table



Alirezanet
چهارشنبه 11 تیر 1393, 03:14 صبح
سلام
مدتی هست دنبال راهی برای نوشتن یک Query میگردم که متاسفانه به نتیجه نرسیدم گفتم از اساتید مشورت بخوام.

فرض میکنیم 20 جدول دارم که 19 تای اونها به جدول اول (A) کلید خارجی دارند ....
حال نیاز دارم تا در یک View اطلاعات جدول A رو نمایش بدم که به ازای هر رکورد در جدول های دیگه یک رکورد مجزا بهم نشون بده ... و تا اینجاش مشکلی نیست و با یک Left Join بین تمامی جداول میشه این کار رو کرد. مثال :

SELECT
dbo.TableA.Title


FROM
dbo.TableA
LEFT JOIN dbo.TableB ON dbo.TableB .fk_col = dbo.TableA.pk_col
LEFT JOIN dbo.TableC ON dbo.TableC .fk_col = dbo.TableA.pk_col
LEFT JOIN dbo.TableD ON dbo.TableD .fk_col = dbo.TableA.pk_col
.
.
.



مشکل اینجاست من میخوام مشخص باشه که هر رکورد از کدوم جدول ایجاد شده .... مثلا نام هر جدول ویا فیلد مشترک همه جداول رو هم Select کنم.

خروجی فعلی :
--- Title1 ---
--- Title2 ---
--- Title3 ---

خروجی مورد نظر :

--- TableB --- Title1 ---
--- TableC --- Title1 ---
--- TableD --- Title1 ---

امیدوارم تونسته باشم مشکل رو توضیح بدم ... !
ممنون میشم نظرتون رو بگید

reza4zar
پنج شنبه 12 تیر 1393, 22:04 عصر
نگرفتم چی می خوای

Alirezanet
پنج شنبه 12 تیر 1393, 22:16 عصر
حقیقتش خودم هم توی این موندم که دقیق چی میخوام ....
طبق مثالی که زدم مشکل رو میگم شما راه حل ارائه بدید .. اینجوری بهتره.

من یک جدول دارم (TableA) که 19 جدول دیگه بهش با کلید خارجی متصل هستند. (یعنی سایر جداول یک ForiegnKey به این جدول دارند.)
حالا من نیاز به یک View جامع دارم که به ازای هر رکورد موجود در سایر جداولم یکبار به صورت تکراری اطلاعات TableA رو نشون بده.
تا اینجا با LeftJoin مثل مثال بالا این اتفاق میفته و بابت هر رکورد Title جدول TableA رو میتونم ببینم.

مسئله اینه که من میخوام در جایی از نرم افزار با نشون دادن این لیست به کاربر اطلاعات جدولی که بهش لینک شده (جدول دارای ForeignKey) رو نشون بدم پس نیاز دارم که بدونم این رکورد متصل به کدوم جدولم بوده که الان تو این لیست هست ... این کار رو به هر شکلی بشه انجام داد فرقی نمیکنه ... راه حلی دارید برای این مشکل ؟

من خودم به فکرم رسید یه جوری Alias مربوط به LeftJoin رو بتونم به عنوان یک ستون نشون بدم ولی این کار رو هم نتونستم کنم !
مثال :
SELECT
dbo.TableA.Title
,
(ALIAS NAME HERE)

FROM
dbo.TableA
LEFT JOIN dbo.TableB AA TB ON TB.fk_col = dbo.TableA.pk_col
LEFT JOIN dbo.TableC AS TC ON TC.fk_col = dbo.TableA.pk_col
LEFT JOIN dbo.TableD AS TD ON TD.fk_col = dbo.TableA.pk_col
.
.
.


من سالهاست دارم query مینویسم ولی اولین باره نیاز شدید به چنین حالتی دارم که واقعا نمیدونم چجوری مشکل رو حل کنم. میدونم پیچیدست خواستم ولی دوستان با تجربه تر راه حلی داشتند ممنون میشم ارائه کنند