PDA

View Full Version : پاک کردن رکوردها در دو جدول به طور همزمان



adabyron
دوشنبه 31 اردیبهشت 1386, 12:09 عصر
سلام
من در پایگاه داده دو تا جدول دارم مثلا tbl1 , tbl2 که tbl1 یک فیلد به نام id داره که کلید اصلی هم هست و همین فیلد در جدول tbl2 هم وجودداره اما کلید اصلی نیست . این دو جدول از طریق همین فیلد با هم ارتباط دارند. حالا من اگه بخوام از هر دو تا جدول رکوردهایی که فیلد id آنها برابر با مثلا 120 هست رو پاک کنم، باید از چه کوئری استفاده کنم ؟؟ ممنون میشم که هر چه زودتر جوابمو بدین مرسی

adabyron
دوشنبه 31 اردیبهشت 1386, 12:16 عصر
از این کوئری ها هم استفاده کردم ولی error داد
str = "DELETE FROM Tbl1, Tbl2 USING Tbl1 O JOIN Tbl2 S ON (O.id = S.id) WHERE O.id = 120";

str =
"DELETE FROM Tbl1 WHERE id IN (SELECT * FROM Tbl2 Inner Join Tbl1 WHERE tbl1.id = Tbl2.id=120) "

str = "Delete Tbl1, Tbl2 From Tbl1 inner left join Tbl2 on Tbl2.id =Tbl1.id where Tbl1.id=120";

adabyron
دوشنبه 31 اردیبهشت 1386, 12:20 عصر
کسی نیست جواب بده ؟؟

omid_Ahmadi
دوشنبه 31 اردیبهشت 1386, 12:23 عصر
با دو تا کوئری، اول همه رکوردهایی که ID برابر با 120 دارند رو از جدول 2 پاک کن، بعد هم همه رکوردهایی با این ID رو از جدول 1 پاک کن.

پ.ن: برای نوشتن کد می تونی از تگ Code استفاده کنی تا بشه کدهایی رو که می نویسی خوند.

adabyron
دوشنبه 31 اردیبهشت 1386, 12:29 عصر
ممنونم آقای احمدی، راستش من نمی خواستم که هر کدومو جدا حذف کنم ، نمیشه با یه دستور فیلدهای هردو تا جدول رو پاک کرد؟ مثلا اگه ما به جای 2 تا جدول 5 -6 تا جدول داشته باشیم چی ؟ اونوقت باید واسه هر کدوم جدا دستور بدیم ؟

__H2__
دوشنبه 31 اردیبهشت 1386, 12:56 عصر
سلام
خوب مشکلی ندارد! هر دستور یک جدول را پاک میکند، کار سختی نیست، فقط همانطور که کاربر omid_Ahmadi (http://www.barnamenevis.org/forum/member.php?u=8730) vbmenu_register("postmenu_342601", true); اشاره کردند، شما باید اول جداول زیر مجموعه را پاک کنید، یعنی جدول اصلی که حاوی آن کلید است باید آخر باشد.

البته با تنظیمات خاص در زمان تعریف Relation در اکسس و SQLServer میتوان گفت که با پاک شدن یک آیتم از جدول زیر مجموعه آن از جداول دیگر هم پاک شود، در این حالت فقط نیاز به پاک کردن جدول اصلی است.

Seivan
دوشنبه 31 اردیبهشت 1386, 13:43 عصر
موقعی که ارتباط بین جدول tb1, tb2 را تعریف می کنی (با استفاده از فیلد مشترک) Option مربوط به Casacade Delete را فعال بذار. این با عث می شه که توی Query فقط سطر مربوطه در tb1 را حذف کنی که با حذف سطر مربوطه پایگاه داده خودش تمام سطرهای مرتبط با آن سطر را در tb2 حذف می کند.

adabyron
چهارشنبه 02 خرداد 1386, 09:14 صبح
ممنونم جناب H2 میشه بفرمایید چه تنظیماتی باید انجام بدم ؟؟

__H2__
چهارشنبه 02 خرداد 1386, 10:08 صبح
سلام
کاربر Seivan (http://www.barnamenevis.org/forum/member.php?u=20211) گفتند !!!!
در بعد از تعریف Relation بین دو جدول که معمولاً با درگ ماوس انجام میشود یک جایی گزینه Casacade Delete را خواهید یافت (حذف آبشاری) کافیست آنرا فعال کنید.

این گزینه در TypeDataSet و SQL Server و (JET (Access وجود دارد و حتماً در بانک های دیگر هم وجود دارد، جایش در هر کدام از سه مورد فوق فرق دارد و اصولش یکی است،کافیست Relation را انتخاب کنید و property آن را مشاهد کنید، گزینه فوق را خواهید یافت.

باز اگر نیافتید بگید، دقیق تر نگاهی کنم و من یا دوستان جواب دهیم.