PDA

View Full Version : سوال: مشکل با join



soft-c
جمعه 15 اردیبهشت 1391, 11:48 صبح
سلام .
وقتی 2 تا جدول را inner join می کنیم اطلاعات تکراری پیدا می شود . مثلا اگر هر دو جدول فیلد cost داشته باشند دو تا فیلد به نام های cost و cost_1 ایجاد می کند که اطلاعات هر دو جدول را در آن قرار می دهد که تکرار می شود .
حالا اگر بخواهیم مثلا فقط فیلد cost را داشته باشیم و اطلاعات به صورت غیر تکراری زیر هم قرار گیرند .یعنی جایی که cost مربوط به جدول اول است اطلاعات cost جدول دوم null یا خالی باشد و به همین صورت تا پایان ، چه راهکاری را پیشنهاد می کنید.
تشکر

Felony
جمعه 15 اردیبهشت 1391, 12:26 عصر
سوالتون کلا مربوط به بخش بانک های اطلاعاتی هست و باید تو انجمن "پایگاه داده" مطرحش میکردید ؛ اینجا مربوط به سوالاتی هست که مربوط به کار با بانک های اطلاعاتی در دلفی هستند .

چرا هر دو Table تون حاوی فیلد Cost هست ؟ تا جایی که سوالتون بیان میکنه این دو فیلد معنای یکسانی دارند و اطلاعات یکسانی درشون ذخیره میشه ، اگر اینطور هست پس طراحی بانک اطلاعاتیتون اشتباه هست .

در هر صورت میتونید اسم فیلد Cost جدول دوم رو در Join نیارید و کلا اون فیلد رو از نتایج Join حذف کنید .

DelphiProgrammer
شنبه 16 اردیبهشت 1391, 00:07 صبح
سلام علیکم.
شما دوتا سؤال کردید.
یکی اینکه میخواهید یکی از costها بیاد. یکی اینکه چطوری اگر یکی null بود اون یکی مقدارش بیاد.
جواب سؤال اول اینکه باید شما به جای اون * جلوی select قشنگ بگی چه فیلدی میخواهید نمایش داده بشه.
اول هم اسم جدول رو بیاری و پشتش با نقطه اسم فیلدی که میگی هم نام هست با اون یکی فیلد جدول دیگه بیاری. مثلا میشه این [table_1].[data]
اما جواب سوال دوم.
ببین فرض کن جدول [table_1] و [table_2] هر دو یک فیلد دارن همنام به نام [data] اونوقت اگر بخوای یکی رو نمایش بدی و اولیت مثلا با فیلد جدول اولی باشه و اگر null بود اون داده مال اون یکی جدول نمایش داده بشه و حتی اگر هر دو null بودن باید بیای از تابع isnull استفاده کنی و یک فیلد خودت موقعی که select رو میسازی بسازی برای خودت. کدش مثلا میشه این
select D=isnull(isnull([table_1].[data],[table_2].[data]),'0')
from [table_1] join [table_2] on [table_1].[id1]=[table_2].[id2]

موفق باشید.