سلام
من یک ستون به نام PeigiriCode در 25 جدول در بانک اطلاعاتیم دارم.
می خوام ببینم چطور می شه یک سلکت بزنم و این ستون در تمامی جداول بررسی بشه؟
با تشکر
سلام
من یک ستون به نام PeigiriCode در 25 جدول در بانک اطلاعاتیم دارم.
می خوام ببینم چطور می شه یک سلکت بزنم و این ستون در تمامی جداول بررسی بشه؟
با تشکر
باید دستور سلکت رو اینجوری بنویسم:
@"SELECT FormName
FROM tblServisRequest, tblOfficeDuty, tblMosaede2, ...
WHERE PeigiriCode = '" + txtCode.Text + "'";
که همه 25 جدولم باشه؟
یا روش بهتری هم هست؟
یا اصلاً روش نوشتن این سلکت درسته یا نه؟
اولا ک چرا سوالت رو تو بخش sql نمی زنی؟!؟!
ثانیا جوابت اینه که:
حتما txtCode.Text توی یک جدول وجود دارد به این معنی که یک جدول وجود داره که PeigiriCode کلید اصلی آن است و در بقیه جداول این ستون بعنوان کلید فرعی هست. من اسم این جدول اصلی رو می ذارم tblmain
select tblX.formName
from (select PeigiriCode from tblmain where PeigiriCode ='" + txtCode.Text + "') as m
join tbl1 ON m.PeigiriCode= tbl1.PeigiriCode
join tbl2 ON tbl1.PeigiriCode= tbl2.PeigiriCode
و تا آخر ادامه می دی
PeigiriCode کلید اصلی یا فرعی نیست. یک فیلد عادی است.
لطفاً در مورد کد بیشتر توضیح دهید.
درضمن عذرخواهی می کنم که تاپیک رو اینجا ایجاد کردم.
خب در این کد مهم نیس فیلد شما اصلی یا فرعی باشه.
یه سوال دارم. شما میخوای txtCode.Text رو در همه جدولها سرچ کنی و ببینی تو کدوم جدول هست یا نه؟!
من فکر می کنم شما جداول رو درست طراحی نکردید. میشه چندتا از جدولها با فیلدها رو بهم بگی تا بتونم بهتر کمکت کنم
Untitled.jpg
در تمام جداولم دقیقاً این ستون با همین نام وجود دارد که از نوع text می باشد.
سلکت من بدین شکل:
مثلاً: ستون FormName و ID ( که aAuto Number هستش ) رو از تمامی جداول بیار به شرطی که PeigiriCode = 35/1.
این سلکت فقط از یک جدول اطلاعات رو ( حالا ممکن 3 یا 4 یا ... تعداد بیاره ) پیدا می کنه. ( به دلیل اینکه PeigiriCode جوری ذخیره می شود که توی دو جدول امکان ندارد 35/1 وجود داشته باشد ) ( در یک جدول چندتا هست ولی در جدول دیگری نیست )
بعد میگم از اون هایی که پیدا کردی FormName اونی رو بیار که ID اون از همه کوچکتر هستش.
در مجموع در آخر به من یک رشته برمی گرداند.
خوب توضیح دادم یا نه؟
عالی بود!!!
درست حدس زدم جدول ها درست طراحی نشده چون مقدار تکراری در یک ستون وجود دارد.
شما بایدFormName و ID و ستونهایی که داده تکراری دارد را جدا کرده و در یک جدول جدید قرار بدی بعد یک کلید خارجی به جدولهای دیگه بزنی. اینطوری فقط یک FormName داری و نیاز نیس کوچکترین رو انتخاب کنی.
اگه راجع به اطلاعاتت و رابطه هاشون بیشتر بگی جدولهات رو هم طراحی می کنم واست
یعنی یه همچین چیزی باید بنویسم:
@"SELECT ID, FormName
INTO tblNewTable ( وجود ندارد، با این دستور ساخته می شود )
FROM تمامی جدوال
WHERE PeigiriCode = '" + 35\1 ( مثلاً ) + "'";
@"SELECT FormName
FROM tblNewTable
WHERE ID از همه کوچکتر باشد;
دوست عزیز شما نباید جداول رو طوری طراحی کنی ک واسه پیدا کردن یک داده مجبور بشی همه جدولها رو بگردی. جداول شما نیاز به نرمالسازی داره... حالا خود دانی
یعنی 25تا کدپیگیری داریم که هرکد مختص یک فرم خاصه و به هر کاربر بصورت تصادفی یکی از این 25تا کد اختصاص داده می شه؟
اگه همین باشه کافیه شما یه جدول بنام Head_Info داشته باشی که شامل فیلدهای :
ID : کلید اصلی آتونامبر
FormName : از نوع varchar(15)
PeigiriCode: این ستون مقدار تکراری ندارد و هر رکورد مختص یک فرم است
در کل این جدول شما فقط 25 ردیف داره.
با این حساب دیگه نیاز نیس واسه بدست آوردن اسم فرم همه جدولها رو بگردی و کوئری شما می شه:
@"SELECT FormName
FROM Head_Info
WHERE PeigiriCode = '" + txtCode.Text + "'";
حالا اگر توی جدولهای دیگه وجه اشتراک وجود داره و ستون هایی هستند که مقدار تکراری یا NULL می گیرند باید بقیه جدولها هم بهینه بشه
داداش گلم درست شد.
شما گفتی یه جدول درست کن منم یکی درست کردم و دقیقاً همون فیلدهایی که گفتید رو درست کردم.
وقتی که داره کد پیگیری رو داخل جدولی که به فرم خودش مربوط هست می ریزه بهش گفتم توی جدول جدیدی هم که درست کردم بریز.
از صبر و حوصله ای که به خرج دادید ممنونم.
خاهش می کنم آبجی!!
اگه در جدول خودش یک ستون بنام PeigiriCode داری که همه سطرها مقداری یکسان می گیره، اون ستون رو حذف کن