2012-12-12 11 views
7

के बाद अपडेट नहीं हो रहा है मेरी एसक्यूएल बेला है: http://sqlfiddle.com/#!2/f9bae/1अद्यतन पूरी स्ट्रिंग

जिसमें मैं अगर पूरी नाम है या नहीं लुकअप तालिका द्वारा सत्यापित की जा रही है और यदि कोई त्रुटि है तो यह होना चाहिए की जाँच करने के कोशिश कर रहा हूँ सही मूल्य से प्रतिस्थापित हो जाएं लेकिन मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि यदि किसी भी नाम में एक से अधिक गलत मान होते हैं तो क्वेरी केवल उस नाम के एक हिस्से को अपडेट करें और बाकी को अपरिवर्तित छोड़ दें, कृपया मुझे बताएं कि मैं अपडेट के लिए अपनी क्वेरी कैसे संशोधित कर सकता हूं इसलिए यह लुकअप टेबल सही मूल्यों के अनुसार पूरा नाम अपडेट करेगा।

धन्यवाद,

उत्तर

2

यहाँ एक SQLFIddle demo

इस बदसूरत क्वेरी एक स्ट्रिंग में अधिकतम 4 प्रतिस्थापन के लिए काम करती है। यदि आपको अधिक प्रतिस्थापन की आवश्यकता है तो इन शब्दों को एक स्ट्रिंग में बदलने के लिए उपयोगकर्ता परिभाषित फ़ंक्शन बनाने का सर्वोत्तम तरीका है और इसे अपडेट करने के लिए उपयोग करें।

UPDATE table1 a 
    LEFT JOIN lookup b1 on a.username LIKE CONCAT('%', b1.`WRONG`, '%') 
    LEFT JOIN lookup b2 on a.username LIKE CONCAT('%', b2.`WRONG`, '%') 
      and (b2.Wrong not in (b1.Wrong)) 
    LEFT JOIN lookup b3 on a.username LIKE CONCAT('%', b3.`WRONG`, '%') 
      and (b3.Wrong not in (b1.Wrong,b2.Wrong)) 
    LEFT JOIN lookup b4 on a.username LIKE CONCAT('%', b4.`WRONG`, '%') 
      and (b4.Wrong not in (b1.Wrong,b2.Wrong,b3.Wrong)) 

SET a.username = 
REPLACE(
    REPLACE(
     REPLACE(
      REPLACE(a.username, IFNULL(b1.`WRONG`,''), IFNULL(b1.`RIGHT`,'')) 
     , IFNULL(b2.`WRONG`,''), IFNULL(b2.`RIGHT`,'')) 
    , IFNULL(b3.`WRONG`,''), IFNULL(b3.`RIGHT`,'')) 
    , IFNULL(b4.`WRONG`,''), IFNULL(b4.`RIGHT`,'')) 
+0

आपकी मदद के लिए बहुत बहुत धन्यवाद! :) –

0
अपने स्थापना के साथ

यह सिर्फ 3 बार जो दोहराता संभाल लेंगे तक अद्यतन चलाने के लिए आसान हो सकता है। एक तरफ ध्यान दें चौधरी या चौधरी पर :)

http://sqlfiddle.com/#!2/2d4c6/1

संपादित chodry की तुलना में शायद अधिक सही है: वैकल्पिक रूप से आप लुकअप तालिका से छुटकारा पा सकते अगर आप इस तरह वहाँ भी कई प्रविष्टियों की जरूरत नहीं है: -

http://sqlfiddle.com/#!2/890ea/1

+0

नहीं, यह मेरे एक प्रश्न से किया जाना चाहिए क्योंकि कुछ नामों में चार संयोजन होते हैं और कुछ नाम पांच होते हैं। तो अगर मैं इसके लिए जाऊंगा तो यह सबसे खराब स्थिति परिदृश्य होगा ....: -] –

+0

यदि आपके पास बहुत अधिक सुधार नहीं हैं तो आप उन्हें एक ही प्रतिस्थापन में डालने का प्रयास कर सकते हैं। – Himanshu

संबंधित मुद्दे