برای مثال شما می خواهید در یک جدول سطری که ID اون برابر با 150 هست رو تبدیل به 151 کنید و همچنین همزمان سطری که ID اون برابر 160 هست رو برابر 161 کنید...
- استفاده از دو کوئری :
در اینجا اولین فکری که به ذهن میرسه استفاده از دو کوئری به جای یک کوئری هست که تقریبا تصمیم عاقلانه ای هم هست...
- ایراد :
اما اگر تصمیم داشته باشید ID که 150 هست رو به 151 و ID که 151 هست رو به 150 تبدیل کنید با دو کوئری به مشکل بر می خورید...
چرا ؟
به دلیل اینکه در کوئری اول 150 به 151 تبدیل می شه و حالا دو سطر با ID که 151 هست داریم و حالا نوبت کوئری دوم هست که 151 رو تبدیل به 150 کنه
چه اتفاقی می افته ؟... هر دو سطر تبدیل به 150 میشه
و اینجا ما به خواستمون نمی رسیم ... (تبدیل 150 به 151 و تبدیل 151 به 150 همزمان )
اگه فیلد ID به صورت PRIMARY KEY باشه که دیگه در همون کوئری اول به مشکل بر می خوریم ، زیرا داده تکراری نمی پذیرد ... و هیچکدام از کوئری اول و دوم اجرا نمی شود
- راه حل :
UPDATE `TABLE`
SET id = CASE id
WHEN 151 THEN 150
WHEN 150 THEN 151
END
WHERE id IN (1,2);
- کاربرد :
یکی از نمونه های پرکاربرد این مسئله در طراحی ترتیب برای قرار گیری منو یا مطالب در سایت هست ...