PDA

View Full Version : بدست آوردن یک فیلد که 2 بار تو query لازمش داری.



turk_programmer
سه شنبه 17 شهریور 1383, 17:59 عصر
سلام .
من 3 تا table دارم.
1- sendMessage
که دارای فیلدهای زیره :
Id
sendUnitId
Message

2- ReciveMessage
که دارای فیلدهای زیره :
Id
ReciveUnitId

3- Units
که فیلدهاش UnitId , UnitName هست.

جداول 1و 2 با هم از طریق Id ارتباط دارن و هر دو جدول هم با جدول 3 از طریق UnitId هاشون ارتباط دارن.
حالا من میخوام یک Query بنویسم که تو یک سطر این ستونها رو برای من برگردونه :
ستون 1- Id
ستون 2- نام اداره ارسال کننده پیام
ستون 3- نام اداره گیرنده پیام
ستون 4- Message
اما نمیتونم 2 تا نام اداره فرستنده و گیرنده رو با هم از جدول Units در یک سطر بیرون بکشم.
لطفا راهنمایی کنید.
متشکرم.

AminSobati
سه شنبه 17 شهریور 1383, 21:02 عصر
دوست عزیزم،
علت اینکه جدولی به اسم ReciveMessage وجود داره چیه؟ چطور فیلد ReciveUnitId رو در جدول sendMessage قرار نمیدین تا در همین جدول مشخص باشه پیغام از کجا به کجا ارسال شده؟ (البته جساراتا سوال کردم، برای اینکه خودم بهتر متوجه مشکل شما بشم)

turk_programmer
چهارشنبه 18 شهریور 1383, 08:20 صبح
چون بین جداول 1-3(بین SendUnitId , UnitId) و 2-3 (بین ReciveUnitId , UnitId) یک Relation وجود داره و میخواهیم اگه unitId در جدول Units تغییری ایجاد شد تو جداول 1 و 2 هم تغییر کند.

اگه SendUnitId , ReciveUnitId تو یک جدول بود از جدول Units به هر دو فیلد SendUnitId , ReciveUnitId نمیتونستیم Relation ایجاد کنیم.

AminSobati
چهارشنبه 18 شهریور 1383, 12:21 عصر
حق با شماست،
اگر چه نمیشه Multiple Cascade Path ایجاد کرد اما توسط Trigger این کار امکانپذیر هست. در هر حال به هر دلیلی که ترجیح دادین از Trigger استفاده نکنین، برای وضعیت فعلی، این Query رو میتونین استفاده کنین:


SELECT S.ID, U1.UnitName AS 'Sender', U2.UnitName AS 'Receiver', S.Message
FROM SendMessage S JOIN Units U1 ON S.sendUnitId=U1.UnitID
JOIN ReciveMessage RM ON RM.ID=S.ID
JOIN Units U2 ON U2.UnitID=RM.ReciveUnitId


موفق باشید،
امین ثباتی MCSD

turk_programmer
چهارشنبه 18 شهریور 1383, 15:42 عصر
یه دنیا ممنون.

AminSobati
چهارشنبه 18 شهریور 1383, 16:23 عصر
موفق باشین :)