उसी तालिका के आधार पर अद्यतन तालिका


12

मेरे पास उत्पाद विवरण के साथ एक तालिका है, और प्रत्येक उत्पाद विवरण में एक product_idऔर एक है language_id। मुझे क्या करना चाहते हैं एक साथ सभी फ़ील्ड अद्यतन है language_idकी 2एक ही के बराबर होना चाहिए product_idजहां language_idहै 1

अब तक मैंने निम्नलिखित क्वेरी की कोशिश की है, लेकिन मुझे यह इंगित करने में त्रुटियाँ हो रही हैं कि MySQL एक तालिका को अद्यतन नहीं करना चाहता जहाँ तालिका का उपयोग उपकुंजी में भी किया जा रहा है।

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

क्या MySQL में इस सीमा के आसपास एक "सरल" तरीका है? या कोई "ट्रिक्स"? मैं थोड़ा हैरान हूं कि मेरी क्वेरी काम नहीं करती, क्योंकि यह तर्कसंगत लगता है।

जवाबों:


19

यह बल्कि जोखिम भरा व्यवसाय है, और मैं समझ सकता हूं कि क्यों। यह जिस तरह से MySQL उप-प्रक्रियाओं को संसाधित करता है, उसके साथ करना है। मैंने इसके बारे में 22 फरवरी, 2011 को लिखा था: MySQL सबक्वेरी के साथ समस्या

चयनों और सबक्वेरी सेलेक्ट में शामिल JOIN का प्रदर्शन ठीक है। चीजों के फ़्लिप्साइड पर, UPDATEs और DELETE एक नहीं बल्कि मृत्यु-साहसिक हो सकते हैं।

सुझाव

क्वेरी को रीक्रिएट करने का प्रयास करें ताकि यह दो तालिकाओं का एक INNER JOIN हो

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;

-2
update products_description pd1,
 (select products_seo from products_description where language_id = 1) pd2
set pd1.products_seo = p2.products_seo
where pd1.products_id = p2.products_id and pd1.language_id <> 1;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.