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

SQL क्वेरी:नवीनतम N को छोड़कर तालिका से सभी रिकॉर्ड हटाएं?

आप इस तरह से रिकॉर्ड्स को हटा नहीं सकते, मुख्य समस्या यह है कि आप LIMIT क्लॉज का मान निर्दिष्ट करने के लिए सबक्वेरी का उपयोग नहीं कर सकते।

यह काम करता है (MySQL 5.0.67 में परीक्षण किया गया):

DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT 42 -- keep this many records
  ) foo
);

मध्यवर्ती सबक्वेरी है आवश्यक। इसके बिना हम दो त्रुटियों में भाग लेंगे:

  1. SQL त्रुटि (1093):आप खंड से अद्यतन के लिए लक्ष्य तालिका 'तालिका' निर्दिष्ट नहीं कर सकते हैं - MySQL आपको उस तालिका को संदर्भित करने की अनुमति नहीं देता जिसे आप सीधे सबक्वेरी में से हटा रहे हैं।
  2. SQL त्रुटि (1235):MySQL का यह संस्करण अभी तक 'LIMIT &IN/ALL/ANY/SOME सबक्वेरी' का समर्थन नहीं करता है - आप NOT IN ऑपरेटर के सीधे सबक्वेरी में LIMIT क्लॉज का उपयोग नहीं कर सकते।

सौभाग्य से, एक मध्यवर्ती सबक्वेरी का उपयोग करने से हम इन दोनों सीमाओं को बायपास कर सकते हैं।

निकोल ने इंगित किया है कि इस क्वेरी को कुछ उपयोग मामलों (जैसे यह एक) के लिए महत्वपूर्ण रूप से अनुकूलित किया जा सकता है। मैं उस उत्तर को पढ़ने का सुझाव देता हूं साथ ही यह देखने के लिए कि क्या यह आपके लिए उपयुक्त है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एमएस एसक्यूएल सर्वर 2008 के साथ एंड्रॉइड कनेक्ट करना

  2. मैं एकल SQL कथन के लिए कॉलम हेडर आउटपुट को कैसे दबा सकता हूं?

  3. MySQL डेटाबेस के लिए दूरस्थ पहुँच सक्षम करें

  4. MySQL में संख्यात्मक मानों के लिए TOP X (या निचला) प्रतिशत चुनें

  5. MySQL में रनिंग टोटल की गणना कैसे करें