PDA

View Full Version : کوئری آپدیت بین 3 تیبل



A_1397
شنبه 23 اسفند 1393, 16:59 عصر
129430
دوستان من 3تا جدول بالا رو دارم که میخام فیلد C از Table1 را با فیلد C از Table3 آپدیت کنم. کوئریش رو نمیتونم درآرم!

SabaSabouhi
شنبه 23 اسفند 1393, 17:44 عصر
129430
دوستان من 3تا جدول بالا رو دارم که میخام فیلد C از Table1 را با فیلد C از Table3 آپدیت کنم. کوئریش رو نمیتونم درآرم!

سلام
چه کاری می‌خوای انجام بدی که نیاز به به‌روز رسانی داری؟
به احتمال زیاد در طراحی مشکل داری، چون در حالت عادی هم‌چنین کاری انجام نمی‌دیم. هر داده فقط باید تو یه جدول باشه
و هنگام استفاده بهش ارجاع داشته باشیم.
اما اگه دلیل خاص و موجه‌ی برای این منظور وجود داشته باشه، باید این کار رو بوسیله‌ی Trigger انجام بدی.

صبا صبوحی

A_1397
یک شنبه 24 اسفند 1393, 08:20 صبح
دلیلم برای اینکار مهم نیست مهم اینه که احتیاج دارم فیلد C رو به جدول1 اضافه کنم. کوئری update با باید با join تلفیق کنم ولی نمیدونم چطوری.

SabaSabouhi
یک شنبه 24 اسفند 1393, 09:42 صبح
دلیلم برای اینکار مهم نیست مهم اینه که احتیاج دارم فیلد C رو به جدول1 اضافه کنم. کوئری update با باید با join تلفیق کنم ولی نمیدونم چطوری.

سلام
جدول 1 چرا Id نداره؟ مگه جدول 1 از جدول 2 و 3 ساخته نمی‌شه؟ پس می‌شه انتظار داشت که Id اون‌ها رو داشته باشه.
اگه داشته باشه، به روز کردنش کار ساده‌ای هست.

صبا صبوحی

A_1397
یک شنبه 24 اسفند 1393, 12:17 عصر
سلام
جدول 1 چرا Id نداره؟ مگه جدول 1 از جدول 2 و 3 ساخته نمی‌شه؟ پس می‌شه انتظار داشت که Id اون‌ها رو داشته باشه.
اگه داشته باشه، به روز کردنش کار ساده‌ای هست.

صبا صبوحی

فکر کنم این عکس راحتتر متوجه بشین
129449
من کوئری میخام که داده های قرمز رو که ماکسیمم فیلد Cجدول3 هست رو به جدول 1 اضافه کنه

SabaSabouhi
یک شنبه 24 اسفند 1393, 12:50 عصر
فکر کنم این عکس راحتتر متوجه بشین

من کوئری میخام که داده های قرمز رو که ماکسیمم فیلد Cجدول3 هست رو به جدول 1 اضافه کنه

سلام
این جدول‌ها رو خودت طراحی کردی یا کار شخص دیگه‌ای هست؟
چرا برای جدول‌های 1 و 3 کلید اصلی نداری؟ بر فرض که الان مشکلت رو حل کنی، وقتی جدول‌ها بزرگ شدن و تعداد
رکوردهای زیاد توشون قرار گرفت، می‌دونی چقدر کند می‌شه و پشتیبانی این برنامه چقدر سخت می‌شه؟

بله، حتا با این جدول‌های «بد طراحی شده» و «غیر نرمال» هم می‌شه این کار رو انجام داد.
کافیه روی جدول 3 یک Trigger بنویسی، که جدول 1 رو با توجه به جدول 2 به روز کنه.
یه چیزی تو این مایه‌ها:


UPDATE Table1
SET C = MaxC
FROM Table1
JOIN Table2 ON Table1.A = Table2.A AND Table1.B = Table2.B
JOIN ( SELECT Id, MaxC = MAX( C ) FROM Table3 GROUP BY Id ) T ON T.Id = Table2.Id



فرض کردم که ترکیب A و B رو Unique Index کرده باشی.
البته این روش اصلاً بهینه نیست.
اگه جدول‌هات رو درست کردی، می‌شه این کار رو به‌تر انجام داد.

صبا صبوحی