PDA

View Full Version : ایا می توان از کلید اصلی یک جدول در جدول دیگر دو بار استفاده کرد؟



lahtagolfa
سه شنبه 11 بهمن 1390, 11:05 صبح
سلام من دو تا جدول دارم که در جدول staff کلید اصلی staffcode است و در جدول دیگه staffcode کلید خارجی , editstaffcode
در واقع من می خوام وقتی چیزی ثبت می شه staffcode پر بشه و وقتی ویرایش می شه editstaffcodeپر بشه و موقع نمایش نام و فامیلی رو نشون بده و از اون جایی که editestaffcode همون staffcode نمی تونم همزمان نام و فامیلی هر دو رو نشون بدم میشه راهنمایی کنید؟

http://www.iran-eng.com/attachment.php?attachmentid=83109&d=1327951361&thumb=1 (http://www.iran-eng.com/attachment.php?attachmentid=83109&d=1327951361)

Galawij
سه شنبه 11 بهمن 1390, 12:02 عصر
سلام،
راستش عنوان تاپیک را متوجه شدم ولی توضیحاتتون را نه!
این لینک (http://barnamenevis.org/showthread.php?319377-%D8%AF%D9%88-Forgine-key-%D8%A7%D8%B2-%D9%8A%D9%83-table-%D8%AF%D8%B1-table-%D8%AF%D9%8A%DA%AF%D8%B1) را ببینید، امیدوارم مفید واقع بشه.

mina_ghorbani
سه شنبه 11 بهمن 1390, 15:14 عصر
وقتي داري join مي زني بايد 2 بار با جدول staff جوين بزني

select s1.staffCode ,s2.staffCode as EditStaffCode
from tbl inner join staff s1 on tbl.staffCode=s1.staffCode
inner join staff s2 on tbl.editStaff=s2.staffCode

lahtagolfa
سه شنبه 11 بهمن 1390, 20:49 عصر
ببخشید ولی من این کار رو قبلا امتحان کردم ولی جواب نمی ده در واقع سطرهایی از جدول رو که editstaffcode خالی دارن رو برنمی گردونه ببینید من تو برنامه چند تا فرم دارم که قراره اطلاعات توشون ثبت و ویرایش بشه و هر اطلاعاتی که ثبت می شه کد پرسنلی که ثبت کرده هم ثبت می شه و هر اطلاعاتی که ویرایش می شه باید کد پرسنلی که ویرایش کرده هم ثبت شه و حالا ممکنه یه جایی اطلاعات ویرایش نشه اون وقت هیچ کد ویرایش کننده ای ندارم و وقتی می خوام گزارش بگیرم باید نام پرسنل رو نشون بدم می گم که خالی بر می گردونه اینم کدش



SELECT dbo.acquaintance.acquaintancecode, dbo.acquaintance.acquaintancetype, dbo.staff.staffname + ' ' + dbo.staff.stafffamily AS insertnameandfamily,
staff_1.staffname + ' ' + staff_1.stafffamily AS editnameandfamily
FROM dbo.acquaintance INNER JOIN
dbo.staff ON dbo.acquaintance.staffcode = dbo.staff.staffcode INNER JOIN
dbo.staff AS staff_1 ON dbo.acquaintance.editstaffcode = staff_1.staffcode

maktoom
سه شنبه 11 بهمن 1390, 22:21 عصر
سلام.
فکر کنم اگه از انواع دیگه ی join مثل leftjoin استفاده کنید مشکلتون حل میشه.

lahtagolfa
چهارشنبه 12 بهمن 1390, 13:01 عصر
ممنون از راهنمایی های همه ولی من وقتی از leftjoin هم استفاده کنم اگر در جدولم کلا ویرایش انجام نگردد کلا نتیجه گزارش تهی است و ثبت نامی ها را هم نشان نمی دهد .

baktash.n81@gmail.com
شنبه 15 بهمن 1390, 09:10 صبح
سلام

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