PDA

View Full Version : select تو در تو



saman_itc
چهارشنبه 14 فروردین 1387, 10:43 صبح
با سلام
با سلام

من سه تا جدول دارم
آیا میشه تو select شرط واسه یه فیلد از جدول دیگه ای تو همین بانکم داشته باشم
من می تونستم کد مورد نظرم تو جدولم بزارم ولی برای افزوده گی نداشته باشم این کارو کردم؟؟؟؟؟؟

سه تا جدول
جدول اول مشخصات سند رسید شالی کوبی که فیلد ID_Shali داره
جدول دوم سند های تبدیل .که هر رسید شالی می تونه چند بار تبدیل بشه.یا یه بار.فیلد مورد نظر ID_tabdil
جدول سوم .هر ID_Tabdil یه سری مقادیر ریز برنج ها تو یه جدول دیگه ذخیره میشه.
فیلد هاش .ID_tabdil و Vazn_riz
حالا من میخواهم همه Vazn_riz های یه رسید شالی رو Select کنم

کد:

SELECT Riz FROM Riz_t WHERE idt IN
(SELECT A_Tabdil.Id FROM A_Tabdil WHERE (Factor_shali.Id = A_Tabdil.ID_shali))
ما IDT یا (a_tabdil.id)رو میخواهییم که تو جدول A_tabdil فیلد id_shali شون با هم برابر باشند

اگه ممکنه از INNER JOIN استفاده نکنید از همین روشی که من نوشتم بنویسین

saman_itc
چهارشنبه 14 فروردین 1387, 23:59 عصر
دوستان اگه کمک کنید ممنون میشم خیلی حیاطی

Dariuosh
پنج شنبه 15 فروردین 1387, 00:53 صبح
میشه بیشتر توضیح بدی
اینم میدونم که هرچندتا Select که بخوای میتونی داشته باشی

saman_itc
پنج شنبه 15 فروردین 1387, 00:58 صبح
به این تپیک نگاه کن
http://barnamenevis.org/forum/showthread.php?t=98986
بالا گفتم
سه تا جدول داریم
فیلد های جدول Riz_t میخوام
idt تو جدول a_tabdil یکی هستن (کلید خارجی)
به شرطی که a_tabdil ها تو جدول factor_shali فیلد id شون با هم برابر باشه یه مقدار داشته باشن مثلا y

titbasoft
پنج شنبه 15 فروردین 1387, 11:18 صبح
1. سلام
2. حرف هام جدیه
3. این حرف ها رو می زنم چون خیلی برام زور داره یه سری هندی تعطیل پرچم دار توسعه نرم افزار دنیا باشن و ما توی مملکتمون کلی استعداد خارق العاده داشته باشیم و وضعیتمون اینی باشه که هست:

شما فقط 2 خط کد اینجا گزاشتید و حداکثر تلاشتون رو هم کردید که توضیحش بدید (حتی اسکرین شات جداول رو هم ضمیمه کردید) اما فکر می کنم شانس فهمیدن خواسته شما خیلی به صفر نزدیک باشه. من واقعا نمی دونم اگر حجم کد شما به هزار خط برسه چطوری این سیستم جمع میشه.
خواهش می کنم خودتون رو مجبور کنید که کدتون رو همیشه تمیز بنویسید. کامنت بزارید حتی اگر وقت ندارید. در نامگزاری هاتون خیلی دقت کنید. استاندارد های نام گزاری رو حتما رعایت کنید.

علیکم بالمطالعه، مطالعه، مطالعه. اون هم از رفرنس های اصلی. زبان انگلیسی رو خوب یادبگیرید تا بتون از رفرنس های اصلی که کیفیت و تعداشون بی نهایته بهره بگیرید.

در نهایت کدی که شما می خواهید فکر کنم چنین چیزی باشه:

Select [riz] FROM
Riz_t WHRE idt IN
(
SELECT b.[id] FROM A_Tabdil [b] , Factor_shali [a] WHERE a.[Id]=b.[ID_shali]
)

saman_itc
پنج شنبه 15 فروردین 1387, 11:57 صبح
شما کاملا درست میفرمایید
هر کی اینجاست دوست داره راهنمایی بشه
شما هم منو راهنمایی کنید
هندی ها برنامه ریزی دارن ما داریم؟نمی دونیم فردا تو زندگیمون چه اتفاقی میافته .از دست این ....
ما خیره سرمون تو دانشگاه پایگاه داده داشتیم.رو کاغذ با بیستا جدول هم برات select مینوشتم . اما هیچ وقت استاده نگفت برو رو سیستم بشین دو تا جدول بهم بده ....(سیستم نداشتیم تو دانشگاه چه برسه خونه)
نکته جالبش اینه از 10 نفر رفتم 12تومان گرفتم دادیم به یه بنده خدا که بیاد تو دانشگاه بهمون vb6یاد بده
بازم دلیل پس رفت نمیشه..
خدایش زبان هند چی؟EN
زبان ما چیه؟ میریم واسه هیلیکپتر اسم درمیاریم که فارسی مون خراب نشه از اون ور میرم پاسارگاد با دسته خودمون میبریم زیر آب
خوب
اینا هنوز نمیدونن ,ویژال استدیو وجود داره
!
از رفرنسهای خوبتون هم واسه ما بزارین همه که خوب نیستن. ما هم که اولین باره میخواهیم بخونیم ضد حال نخوریم

Dariuosh
پنج شنبه 15 فروردین 1387, 12:43 عصر
1- وقتی یه Select مینویسی اون یه سری اطلاعات برمیگردونه
2- in تو Where یعنی اونایی که این شرایط رو دارن بیار
3- حالا پس میتونی اون Select مورد نظرت رو تو پرانتز مربوط به In بنویسی
4- Selectتت یه Filde بیشتر نباید داشته باشه ها
5- مثلا کد TitbaSoft

titbasoft
پنج شنبه 15 فروردین 1387, 12:57 عصر
بحث توی این تاپیک رو ادامه میدم هر چند مخالف قوانین سایته، چون امید دارم کمی تاثیر گزار باشه.

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

همه چیز فقط و فقط و فقط به خود شخص بستگی داره. برایان تریسی در کتاب Eat that frog قانون 20 ، 80 رو معرفی می کنه. این قانون می گه تنها 20 درصد از عوامل خارجی در پیشرفت و موفقیت شما تاثیر دارن و 80 درصد اون پارامترهای درونی و شخصی خود شما هستند.

وضعیت ایران رو من خوب می دونم اما توی ترافیک موندن همیشه راحت ترین بهانه برای دیر رسیدنه. اینترنت جای هیچ بهانه ای رو برای هیچ کس باقی نزاشته. درست ما توی ایران تحریم هستیم اما چرا هیچ وقت هیچ کی نمیگه که توی ایران یک پتانسیل بسیار بالا برای رشد وحود داره اون هم دسترسی فوق العاده ارزان قیمت به تمام منابع و زیر ساخت هاست. شما می تونید با کمتر از 5 دلار آخرین و بهترین نسخه هر نرم افزار رو تهیه کنید، این می دونید یعنی چی؟!

نتیجه: کد من رو باهاش ور برو تا بفهمی یعنی چی!

saman_itc
پنج شنبه 15 فروردین 1387, 14:29 عصر
بحث زیاده.ولی در منفی نکری چیزی وجود نداره.و حرفهای مثبت به فکر و بعدبه عمل تبدیل میشه
کد شما مشکلی نداره.
ولی من وقتی از IN تو یه SELECT استفاده می کنم.موقع FILL میکنم خطا میده و وقتی که از in استفاده نمیکنم تو FILL مشکل ندارم.
خیلی خوشحالم که دوست خوبی مثل شما دارم
پیشاپیش ممنونم

titbasoft
پنج شنبه 15 فروردین 1387, 14:40 عصر
یک Stored procedure بنویسید و اون رو کال کنید

saman_itc
پنج شنبه 15 فروردین 1387, 14:44 عصر
تو Stored procedure نوشتم از اولش.
من که بدون IN فیل میکنم
IN یه سری شرط میزاره دیگه؟تو اصل مطلب که تغییر ایجاد نمیکنه
پس چرا خطا....

saman_itc
پنج شنبه 15 فروردین 1387, 16:17 عصر
با سلام
شما یه فیلد از دو تا جدول خونیدین این درسته؟

1.

Select [riz] FROM
Riz_t WHRE idt IN
(
SELECT b.[id] FROM A_Tabdil [b] , Factor_shali [a] WHERE a.[Id]=b.[ID_shali]
)

Dariuosh
جمعه 16 فروردین 1387, 02:50 صبح
وقتی میخوای تو IN یه Select بنویسی حتماً باید یه فیلد رو Select کنی

saman_itc
جمعه 16 فروردین 1387, 11:52 صبح
کد به این صورت تغییر دادم دیگه خطا نمی ده ولی هیچ مقداری رو بر نمی گردونه شرطش که درسته !!!!
پیشاپیش از کمکتون ممنونم


کد:
Dim da As New OleDbDataAdapter(" Select riz FROM Riz_t WHERE idt IN (SELECT A_Tabdil.id_shali FROM A_Tabdil WHERE A_Tabdil.id_shali = " & Val(idr.Text.ToString) & ") ", ol_cn)
__________________

bad_boy_2007
جمعه 16 فروردین 1387, 21:35 عصر
1. سلام
2. حرف هام جدیه
3. این حرف ها رو می زنم چون خیلی برام زور داره یه سری هندی تعطیل پرچم دار توسعه نرم افزار دنیا باشن و ما توی مملکتمون کلی استعداد خارق العاده داشته باشیم و وضعیتمون اینی باشه که هست:

شما فقط 2 خط کد اینجا گزاشتید و حداکثر تلاشتون رو هم کردید که توضیحش بدید (حتی اسکرین شات جداول رو هم ضمیمه کردید) اما فکر می کنم شانس فهمیدن خواسته شما خیلی به صفر نزدیک باشه. من واقعا نمی دونم اگر حجم کد شما به هزار خط برسه چطوری این سیستم جمع میشه.
خواهش می کنم خودتون رو مجبور کنید که کدتون رو همیشه تمیز بنویسید. کامنت بزارید حتی اگر وقت ندارید. در نامگزاری هاتون خیلی دقت کنید. استاندارد های نام گزاری رو حتما رعایت کنید.

علیکم بالمطالعه، مطالعه، مطالعه. اون هم از رفرنس های اصلی. زبان انگلیسی رو خوب یادبگیرید تا بتون از رفرنس های اصلی که کیفیت و تعداشون بی نهایته بهره بگیرید.

در نهایت کدی که شما می خواهید فکر کنم چنین چیزی باشه:

Select [riz] FROM
Riz_t WHRE idt IN
(
SELECT b.[id] FROM A_Tabdil [b] , Factor_shali [a] WHERE a.[Id]=b.[ID_shali]
)


این بخش از دستور Select شما مشکل داره :

SELECT b.[id] FROM A_Tabdil [b] , Factor_shali [a] WHERE a.[Id]=b.[ID_shali]

به این صورت اگر بعنوان مثال جدول اول 100 رکورد و جدول دوم 200 رکورد داشته باشه ، جدولی بوجود میاری شامل 100*200 رکورد یعنی 2 میلیون رکورد و سپس عمل ف ی ل ت ر رو روی این جدول انجام میدی که باعث سربار زیاد برای سیستم میشه ، بهتره از Inner Join برای Select داخلی استفاده کنید .

saman_itc
شنبه 17 فروردین 1387, 00:01 صبح
ما که کل صورت مسله رو گفتیم.راه حل شما چی؟

titbasoft
شنبه 17 فروردین 1387, 13:51 عصر
به این صورت اگر بعنوان مثال جدول اول 100 رکورد و جدول دوم 200 رکورد داشته باشه ، جدولی بوجود میاری شامل 100*200 رکورد یعنی 2 میلیون رکورد و سپس عمل ف ی ل ت ر رو روی این جدول انجام میدی که باعث سربار زیاد برای سیستم میشه ، بهتره از Inner Join برای Select داخلی استفاده کنید .
با مقایسه Execution Plan این دو دستور متوجه میشید که هر دو کاملا به یک شکل اجرا میشن.

bad_boy_2007
شنبه 17 فروردین 1387, 21:28 عصر
با مقایسه Execution Plan این دو دستور متوجه میشید که هر دو کاملا به یک شکل اجرا میشن.

دوست من
اولا : ایشون تو اکسس کار میکنن نه SQL Server
ثانیا : SQL Server اول میاد و Query رو Optiomize میکنه و سپس اجرا میکنه یعنی یه سرباز اضافی برای Optimize کردن بر دوش SQL Server تحمیل میشه

ولی اکسس این کار (Optimize ) رو نمیکنه و سرعت فوق العاده پایین میاد