2011-08-19 18 views
42

यह शायद एक आसान एक है ... मैं कैसे प्राप्त कर सकते हैं क्या मैं इस प्रश्न के साथ हैं:mySQL सबक्वेरी सीमा

delete from posts where id not in 
(SELECT id FROM posts order by timestamp desc limit 0, 15) 

हां, तो यह संक्षेप में डाल करने के लिए, मैं प्रत्येक पोस्ट कि isn को हटाना चाहते हैं 'पर टी नवीनतम 15.

जब मैं उस क्वेरी की कोशिश, मैं कि MySQL अभी तक का समर्थन नहीं करता' limit & में/सभी/किसी भी/कुछ सबक्वेरी

संपादित

 
mySQL Server version: 5.5.8 
mySQL Client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $ 
Error: #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 
+0

MySQL संस्करण क्या है? EXSQL त्रुटि EXAQL त्रुटि क्या है? – Shef

उत्तर

124

इस प्रयास करें:

DELETE 
FROM posts 
WHERE id not in (
     SELECT * FROM (
      SELECT id 
      FROM posts 
      ORDER BY timestamp desc limit 0, 15 
    ) 
     as t); 
+0

यह उत्तर है, आप अभी अंतिम समापन पेरिसिस –

+0

खो रहे हैं, आप सही हैं। मैंने जरूरी से ज्यादा एक कोष्ठक जोड़ा था। :) –

+6

धन्यवाद। यह हास्यास्पद है कि यह काम करता है, लेकिन मुझे खुशी है कि यह करता है। – Jase

8

आप इस कोशिश कर सकते हैं:

DELETE 
    p1.* 
FROM 
    posts p1 INNER JOIN 
    (SELECT 
      id 
    FROM 
      posts 
      ORDER BY timestamp DESC 
      LIMIT 0, 15 
    ) AS p2 
ON p1.id = p2.id; 
1

नवीनतम 15 के बाद से हमेशा order.You बस किसी भी आईडी को नष्ट कर सकते उतरते द्वारा पहले 15 से आते हैं यदि आप उन्हें आदेश देगा जिसने इसे पहले 15 में नहीं बनाया। जैसे मैंने अभी कोशिश की और यह ठीक काम किया। उम्मीद है कि यह किसी को

Delete from `table` where id not in (SELECT * FROM (Select id from `table` order by id desc limit 15) as derivedTable); 
संबंधित मुद्दे