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

  • campos9896

    campos9896

    24 Mart 2012
  • max2sims2

    max2sims2

    19 Kasım 2008
  • NLthomas21

    NLthomas21

    20 Mayıs 2008