একই টেবিলের উপর ভিত্তি করে আপডেট টেবিল


12

আমার কাছে পণ্যের বর্ণনা সহ একটি টেবিল রয়েছে এবং প্রতিটি পণ্যের বর্ণনায় একটি product_idএবং একটি রয়েছে language_id। আমি কি করতে চান একটি সঙ্গে সব ক্ষেত্র হালনাগাদ হয় language_idএর 2একই সমান হতে product_idযেখানে language_idহয় 1

এখনও অবধি আমি নীচের ক্যোয়ারীটি চেষ্টা করেছি, তবে আমার ত্রুটিগুলি ইঙ্গিত করছে যে মাইএসকিউএল এমন কোনও টেবিলটি আপডেট করতে চায় না যেখানে টেবিলটি সাব-কোয়েরিতেও ব্যবহৃত হচ্ছে।

UPDATE
  products_description AS pd
SET 
  pd.products_seo = (
    SELECT
      pd2.products_seo
    FROM 
      products_description AS pd2
    WHERE
        pd2.language_id = 1
    AND pd2.products_id = pd.products_id
  )
WHERE
  pd.language_id <> 1

মাইএসকিউএলে এই সীমাবদ্ধতার কাছাকাছি কোনও "সহজ" উপায় আছে? নাকি কোনও "কৌশল"? আমি কিছুটা অবাক হয়েছি যে আমার জিজ্ঞাসাটি কার্যকর হয় না, কারণ এটি যৌক্তিক বলে মনে হয়।

উত্তর:


19

এটি বরং ঝুঁকিপূর্ণ ব্যবসা, এবং আমি বুঝতে পারি কেন এটি। এটি মাইএসকিউএল সাবকিউরিয়াকে যেভাবে প্রক্রিয়া করে তা করতে হবে। আমি 22 ফেব্রুয়ারী, 2011 এ সম্পর্কে এটি লিখেছিলাম: মাইএসকিউএল সাবকিউরিতে সমস্যা

SELECTs এবং subquery SELECTs জড়িত যোগদান সম্পাদনা করা ঠিক আছে। জিনিসপত্রের ফ্লিপসাইডে, আপডেট এবং ডিলিট একটি বরং মৃত্যু-শোধকারী অ্যাডভেঞ্চার হতে পারে।

পরামর্শ

ক্যোয়ারীটিকে পুনরায় সজ্জিত করার চেষ্টা করুন যাতে এটি দুটি টেবিলের অভ্যন্তরীণ যোগ হয়

UPDATE
    products_description pd INNER JOIN products_description pd2 ON
    (pd.products_id=pd2.products_id AND pd2.language_id=1 AND pd.language_id<>1)
SET pd.products_seo = pd2.products_seo;

একবার চেষ্টা করে দেখো !!!


0

ভাল এটি আমার পক্ষে কাজ করে না, সারি সারি সারি থাকা সত্ত্বেও আপডেটটি ঘটেনি। আমার যা করতে হবে তা হল সাব-কোয়েরি হিসাবে অন্য টেবিলটি তৈরি করা যাতে অস্থায়ী ফাইল ব্যবহৃত হয়।

UPDATE tmContact 
INNER JOIN (
SELECT par.id, IF (LENGTH(contact.dynamicValues) > LENGTH(par.dynamicValues), contact.dynamicValues, par.dynamicValues) upd FROM tmContact par
INNER JOIN tmContact contact ON par.id = contact.linkCompanyId AND contact.linkCompanyId IS NOT NULL
WHERE contact.id IS NOT NULL AND contact.dynamicValues <>  par.dynamicValues AND LENGTH(contact.dynamicValues) > LENGTH(par.dynamicValues)
) input ON input.id = tmContact.id
SET tmContact.dynamicValues = upd;

-3
  1. প্রথমে সিলেক্ট স্টেটমেন্ট সহ ভিউ / টেম্প টেবিল তৈরি করুন
  2. অভ্যন্তরীণ যোগদানের সাথে আপডেট ক্যোয়ারী চালান

2
সম্ভবত আপনি কিছু নমুনা কোড দিয়ে উত্তরটি উন্নত করতে পারেন?
ypercubeᵀᴹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.