[SQL]Resultaat tot een maximum beperken

Pagina: 1
Acties:
  • 174 views sinds 30-01-2008
  • Reageer

  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:32

momania

iPhone 30! Bam!

Topicstarter
Mede /14'ers

Ik zit met het volgende:

Ik heb een vrij grote DB2 database een een SQL script om die database wat op te schonen.
Het werk ongeveer als volgt:

- Er is eeb VIEW die bepaald welke records er voor verwijdering in aanmerking komen.
- Het resultaat van die VIEW (records met record-id's) wordt in een aparte tabel opgeslagen.
- Uitgangspunt is dan die tabel, waarin alle record-id's staan. De tabel heeft als inhoud per record 4 id's van de 4 belangrijkste tabellen die geschoond moeten worden.
- Er wordt dan een delete gedaan op een tabel waar het id overeenkomt met de id's die verzameld zijn.


Nu het probleem:

Er worden zo'n beetje 200k records verzameld met id's en dit betekend voor één tabel een factor 6 aan delete's.
Omdat dit dus +/- 1,2 miljoen records betreft die in één keer weg gegooid worden, betekend dat dat DB2 uit z'n transaction log loopt en de query niet af kan maken.
Met de helft lukt het wel, maar omdat dit script op verschillende databases moet worden uitgevoerd heb ik het niet voor het zeggen hoeveel records er verzameld worden.

Ik zat er dus aan te denken om of de view aan te passen dat er maar max 100k records gevonden worden, of de tabel waarin de records opgeslagen worden te schonen tot 100k records.

Ik ben al een dag bezig om een query in elkaar te draaien die het aantal records in een tabel kan terug brengen naar 100k. Hierbij maakt het niet uit welke records verwijderd worden, want die worden de volgende keer wel weer opnieuw opgepikt, maar ik wordt nu bijna gillend gek. 8)7
Ik ben met COUNT's, SUM's, sub query's enz. enz. aan de gang geweest, maar kan de logica gewoon niet vinden. ;(

Ik hoop nu daarom dat jullie me kunnen helpen of ideeën hebben waar ik weer mee verder kan.

ps.
Het moet wel SQL blijven, ik weet ook wel dat ik er een tooltje omheen kan schrijven, maar dat zoek ik dus net niet.

Neem je whisky mee, is het te weinig... *zucht*


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
Tot een maximum beperken
:?

Al eens gekeken bij LIMIT, TOP, of iets dergelijks dat in DB2 ondersteund wordt?

Start je zelf een transactie voordat je alle delete's uitvoert of laat je DB2 die transactie automatisch starten?

Kun je geen gebruik maken van 'cascaded deletes'? Dan moet je slechts uit 1 tabel het record verwijderen mbhv een delete statement, en dan zorgt het dbms er wel voor dat de gerelateerde records automatisch verwijderd worden.

https://fgheysels.github.io/


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

huh? LIMIT?

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
hmm als je het delete met zoiets als
code:
1
2
3
DELETE FROM tabelletje
WHEN   getalletje IN (SELECT getalletje 
                      FROM    het_Delete_tabelletje)


Kan je er een LIMIT aan toevoegen .. tenminste, als DB2 dat ondersteunt..

  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:32

momania

iPhone 30! Bam!

Topicstarter
Helaas, LIMIT wordt niet ondersteud.... ;(

Neem je whisky mee, is het te weinig... *zucht*


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
en TOP?

code:
1
SELECT TOP 100 * FROM tabel

  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:32

momania

iPhone 30! Bam!

Topicstarter

Neem je whisky mee, is het te weinig... *zucht*


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-08 16:45
Ik ben niet bekend met DB2, maar na het lezen van
http://nscpcw.physics.upe...b2s0/fet1st.htm#HDRFET1ST
zou het zoiets moeten worden.
code:
1
SELECT * FROM tabel FETCH FIRST 1000 ROWS ONLY

  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:32

momania

iPhone 30! Bam!

Topicstarter
Sjaaky schreef op 08 augustus 2002 @ 15:37:
Ik ben niet bekend met DB2, maar na het lezen van
http://nscpcw.physics.upe...b2s0/fet1st.htm#HDRFET1ST
zou het zoiets moeten worden.
code:
1
SELECT * FROM tabel FETCH FIRST 1000 ROWS ONLY
Cool! Dit is dus wat ik zocht.. Tnx!

Neem je whisky mee, is het te weinig... *zucht*

Pagina: 1