Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

यह MySQL अद्यतन काम क्यों नहीं करता है?

क्वेरी विफल हो रही है क्योंकि आप किसी तालिका को संशोधित नहीं कर सकते हैं और उसी तालिका से सबक्वेरी में चयन नहीं कर सकते हैं।

देखें सबक्वायरी सिंटैक्स

मुझे लगता है कि आप कुछ जॉइन ट्रिकी के साथ इससे निजात पा सकते हैं:

UPDATE meterreadings AS tgt
INNER JOIN (
  SELECT * FROM meterreadings
  WHERE meterreadingtype_id = 2
  ) AS src
ON tgt.meterreadingdate = src.meterreadingdate
   AND tgt.location_id = src.location_id
   AND tgt.created = src.created
   AND tgt.asset_id = src.asset_id
SET tgt.meterreading = src.meterreading

मैं कोई MySQL विशेषज्ञ नहीं हूं, लेकिन मेरा मानना ​​​​है कि यह काम करता है क्योंकि MySQL पहले सबक्वायरी को संसाधित करता है और परिणाम को अस्थायी तालिका के रूप में स्मृति में संग्रहीत करता है, जो अद्यतन के दौरान नहीं बदलता है। इसका एक दुष्परिणाम यह है कि यदि सबक्वेरी का परिणाम बड़ा है, तो आप एक टन (या समाप्त) मेमोरी को चबा लेंगे।

स्मृति समस्या को हल करने का एकमात्र तरीका (जहां तक ​​​​मुझे पता है) मानदंड का उपयोग करके सबक्वायरी को कम करना है जो सीधे अद्यतन लक्ष्य से संबंधित नहीं हैं। उदाहरण के लिए, यदि आप इन अद्यतनों को रात्रिकालीन प्रक्रिया के भाग के रूप में करना चाहते हैं, तो आंतरिक SELECT केवल पिछले ~24 घंटों में बनाई गई पंक्तियों को लौटाएं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्रति श्रेणी वस्तुओं की गणना कैसे करें?

  2. पीडीओ के साथ कुछ मौजूद है या नहीं, यह जांचने का सबसे अच्छा तरीका क्या है?

  3. वर्चर से फ्लोट में MySQL डेटाटाइप रूपांतरण

  4. Utf8_general_ci और utf8_unicode_ci में क्या अंतर हैं?

  5. श्रोडिंगर्स MySQL तालिका:मौजूद है, फिर भी यह नहीं है