2011-01-05 19 views
5

में स्वयं को पुनर्प्राप्त करने के लिए चारों ओर प्राप्त करें मैं उन सभी रिकॉर्ड्स को हटाने की कोशिश कर रहा हूं जो उनके नाम के तहत नवीनतम संस्करण नहीं हैं लेकिन जाहिर है कि आप उसी तालिका में संशोधित तालिका का उपयोग नहीं कर सकते हैं।एक DELETE क्वेरी

मैं इस कोशिश की, लेकिन यह उपरोक्त कारणों के लिए काम नहीं करता:

DELETE FROM table 
WHERE CONCAT(name, version) NOT IN (
SELECT CONCAT(name, MAX(version)) 
FROM table 
GROUP name 
) 

मैं इस के आसपास कैसे मिल सकता है?

चीयर्स

उत्तर

7

Wrap the inner reference in a derived table

DELETE FROM table 
WHERE Concat(name, version) NOT IN (SELECT nv 
            FROM (SELECT Concat(name, Max(version)) 
                AS nv 
              FROM table 
              GROUP BY name) AS derived) 
+1

धन्यवाद, मैं उस लिंक देखा और इस विधि पहले की कोशिश की लेकिन मैं एक गलत ब्रैकेट छोड़ दिया जाना चाहिए कहीं था। – DonutReply

+0

ने अभी देखा और संपादित किया – DonutReply

1
delete t1 
from table_name1 t1, table_name1 t2 
where t1.version < t2.version 
and t1.name = t2.name; 

// यहाँ उर्फ ​​बनाने की जरूरत है

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