MySQL में आप आमतौर पर कार्यक्षमता प्राप्त करने के लिए सत्र चर का उपयोग करते हैं:
SELECT @rowid:[email protected]+1 as rowid
FROM table1, (SELECT @rowid:=0) as init
ORDER BY sorter_field
लेकिन आप उस टेबल पर सॉर्ट नहीं कर सकते जिसे आप सबक्वेरी में से हटाने का प्रयास कर रहे हैं।
यूपीडी :यानी आपको एक अस्थायी तालिका बनानी होगी, अस्थायी तालिका में रेंजिंग सबक्वेरी सम्मिलित करनी होगी और अस्थायी तालिका के साथ जुड़कर मूल तालिका से हटाना होगा (आपको कुछ विशिष्ट पंक्ति पहचानकर्ता की आवश्यकता होगी):
CREATE TEMPORARY TABLE duplicates ...
INSERT INTO duplicates (rowid, field1, field2, some_row_uid)
SELECT
@rowid:=IF(@f1=field1 AND @f2=field2, @rowid+1, 0) as rowid,
@f1:=field1 as field1,
@f2:=field2 as field2,
some_row_uid
FROM testruns t, (SELECT @rowid:=NULL, @f1:=NULL, @f2:=NULL) as init
ORDER BY field1, field2 DESC;
DELETE FROM my_table USING my_table JOIN duplicates
ON my_table.some_row_uid = duplicates.some_row_uid AND duplicates.rowid > 0
चूंकि यह एक बार का ऑपरेशन है, इसलिए इसे बहुत अधिक ओवरहेड नहीं लाना चाहिए।