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

  • Amazon Web Services

    Amazon Web S

    8 NİSAN 2009
  • Ludique

    Ludique

    21 NİSAN 2009