SORU
23 ŞUBAT 2009, PAZARTESİ


SQL sorgu: tablodaki tüm kayıtları en son N dışında silinsin mi?

Tablodan tüm kayıtları kaldırmak için tek bir mysql sorgu (değişken) inşa etmek mümkün, en son N (ıd aza göre sıralama) hariç.

Böyle bir şey, sadece iş :) değil

delete from table order by id ASC limit ((select count(*) from table ) - N)

Teşekkürler.

CEVAP
23 ŞUBAT 2009, PAZARTESİ


Olamaz kayıtları bu şekilde, ana konu olamaz SINIRI bir fıkra değerini belirtmek için bir sorgu kullanan olmak silmek.

Bu işleri (MySQL 5.0.67 test):

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
);

Ara sorgugerekli. Onsuz iki hata.:

  1. SQL Hatası (1093): hedef tablo 'tablo' tümcesi . GELEN güncelleştirme için belirtebilirsiniz- MySQL doğrudan bir alt sorgu içinde siliniyor tabloya bakın izin vermez.
  2. SQL Hatası (1235): MySQL sürüm desteği yok 'VE HERHANGİ bir///TÜM BAZI sorgu SINIRI'- Operatör DEĞİL, doğrudan bir alt sorgu içinde SINIR tümcesi kullanabilirsiniz.

Neyse ki, bir ara alt sorgu kullanarak bizi bu sınırlamalar hem atlamak için izin verir.


NickC bu sorgu anlamlı bazı durumlarda kullanmak için özelleştirilebilir işaret etti (bunun gibi). his answer eğer senin bakayım okumanızı tavsiye ederiz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • B4ROK

    B4ROK

    1 EKİM 2008
  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • Showtime

    Showtime

    21 HAZİRAN 2006