Soru Limitli Mysql silme deyimi


Bir tablodan satırları silmeye çalışıyorum ama bir hata alıyorum.

DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;

Bu hatayı 50'de aldım:

SQL sözdiziminde bir hata var; 1. satırda '50' yakınında kullanmak için doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin

Neyin yanlış olduğu hakkında bir fikrim yok.


23
2017-08-22 00:25


Menşei


StackOverflow da yayınlanan bu soruyu bir göz atın: stackoverflow.com/q/6111961/799653 - Drew


Cevaplar:


Ofset belirtemezsiniz DELETE'ler LIMIT fıkra.

Yani bunu yapmanın tek yolu, sorgunuzu aşağıdaki gibi bir şekilde yeniden yazmaktır:

DELETE FROM `chat_messages` WHERE id IN (select id from (select id
                                           FROM `chat_messages`
                                       ORDER BY `timestamp` DESC
                                          LIMIT 20, 50) x)

Birincil anahtarınız olduğunu varsayalım id kolon

UPD: Şu anda değiştirilmiş tablodan (Martin Smith'e teşekkürler) seçim yapmasına izin vermediğinden, mysql aldatmaya çift yuvalama uygulamanız gerekir


39
2017-08-22 00:28



Ek bir düzey yuvalama eklemediğiniz sürece MySQL buna izin vermez (Hata 1093). Görmek stackoverflow.com/q/3271396/73226 - Martin Smith
+1 cevap vermem için beni zorluyor - DELETE kabul eder rowcount sadece LIMIT. - Jason McCreary
Yapmıyorum ama bunu yapacağım: P. Teşekkürler dostum - SBSTP
Daha fazla ayrıntı eklemek için yorumumu düzenledim. Alt sorgu doğrudan IN hata alıyorsunuz "Hedef tablo belirtebilirsiniz 'chat_messages', FROM deyiminde güncelleştirme için". Alt sorguyu türetilmiş bir tablo oluşturarak bunu yapabilirsiniz. - Martin Smith
@Martin Smith: evet, büyük bir not. teşekkür ederim - zerkms