[SQL] probleem met update/distinct

Pagina: 1
Acties:

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
Hey,

ik heb een tabel die er als volgt uit ziet:

boekid | waarde
-----------------------
1 | 1
1 | 1
1 | 1
2 | 1
2 | 1
2 | 1
3 | 1
3 | 1
3 | 1


Nu wil ik met een update query, de tabel er als volgt uit laten zien:

boekid | waarde
-----------------------
1 | 1
1 | 0
1 | 0
2 | 1
2 | 0
2 | 0
3 | 1
3 | 0
3 | 0

Het 'waarde' veld moet dus maximaal 1 keer per boek op 1 staan, de rest moet 0 zijn.
Ik heb al veel uitgeprobeerd, o.a. met distinct, maar ik krijg het maar niet voor elkaar... kan iemand me hier misschien mee helpen?

  • Blizard
  • Registratie: September 2001
  • Niet online
Ik denk dat dit niet zomaar gaat lukken met een simpel SQL update ?

Je moet dingen gaan bijhouden en daarna nogmaals erdoor lopen (anders moet je ff zien wat PL/SQL kan doen voor jou)

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 07-05 00:27

TheDane

1.618

Heb je geen andere kolommen in je tabel ? Een date_creation veld ofzo.

Dan kun je alles op 0 zetten en per boekid degene met de laagste of hoogste (of whatever) date_creation op 1 zetten.

Verwijderd

Ik mag aannemen dat je tabel nog wel wat meer velden bevat? Wat is bv. je primary key?
Als ik die voor 't gemak ID noem, en ervan uitga dat 't een autoincrementing field is, zou je zoiets kunnen doen:
code:
1
2
3
4
5
update tabel set waarde = 0
where exists (select boekid from tabel b 
              where b.boekid = tabel.boekid 
              and b.waarde = 1 
              and b.ID < tabel.ID)


Maar dan nog blijft 't op z'n minst een discutabel datamodel...

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 15-10-2025
Verwijderd schreef op maandag 28 maart 2005 @ 11:32:
Ik mag aannemen dat je tabel nog wel wat meer velden bevat? Wat is bv. je primary key?
Als ik die voor 't gemak ID noem, en ervan uitga dat 't een autoincrementing field is, zou je zoiets kunnen doen:
code:
1
2
3
4
5
update tabel set waarde = 0
where exists (select boekid from tabel b 
              where b.boekid = tabel.boekid 
              and b.waarde = 1 
              and b.ID < tabel.ID)


Maar dan nog blijft 't op z'n minst een discutabel datamodel...
Heerlijk!! Hij werkt :)
Ik snap hem alleen nog niet helemaal, die join op eigen tabel zeg maar... straks nog 's wat beter naar kijken.

Dank je :)