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

  • Excel Video Tutorials

    Excel Video

    6 Aralık 2012
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008
  • TechXCentral

    TechXCentral

    12 Temmuz 2011