[SQL] (OR) in bijwerk query

Pagina: 1
Acties:
  • 303 views

Acties:
  • 0 Henk 'm!

  • arnietjez
  • Registratie: Juli 2009
  • Laatst online: 23-09-2022
Tot nu toe heb ik deze code:
UPDATE cursus SET cursus.CursusPrijs = [cursusprijs]*0.97
WHERE ((cursus.ProductCode) Like "FABU*")
Or CursusPrijs*1.07 ((cursus.ProductCode) NOT Like "FABU*");

Er wordt dus een OR gecombineerd met het UPDATE command, nu vraag ik mij af of dit uberhaubt mogelijk is?
Na vele uren op het internet zoeken kom ik alleen maar tegen net iets ander soort gevallen aan, dus ik begin een beetje te geloven dat ik iets onmogelijks probeer uit te voeren.
Zit ik wel in de goede richting of is de OR/UPDATE combinatie uberhaubt niet mogelijk? :?

edit: krijg tevens de foutmelding van ongeldig gebruik van een van de volgende tekens "." "," "!" "()"

[ Voor 8% gewijzigd door arnietjez op 09-07-2009 12:01 ]


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Schrijf de query netjes uit en je ziet dat het een raar ding is:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
UPDATE 
  cursus 
SET 
  cursus.CursusPrijs = [cursusprijs]*0.97
WHERE 
  (
    (cursus.ProductCode) 
    Like "FABU*"
  ) 
Or 
  CursusPrijs*1.07 (
    (cursus.ProductCode) 
    NOT Like "FABU*"
  )
;

1) Wat doen die blokhaken om [cursusprijs] ?
2) Waarom staat (cursus.ProductCode) tussen haakjes? Dit voegt niets toe, integendeel.
3) LIKE "FABU*", wat doet dat * daan? Moet dat geen % zijn? Dat is de gebruikelijke schrijfwijze in SQL, maar wellicht wijkt jouw database daar van af. Welke DB gebruik je?

Een OR in de WHERE is geen enkel probleem, ook niet bij een UPDATE.

Ps. In SQL gebruik je enkele quotes ' en geen dubbele quotes ". Mag je dus ook nog even aanpassen.

[ Voor 8% gewijzigd door cariolive23 op 09-07-2009 12:11 ]


Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Volgens mij moet je dit gewoon verdelen over twee queries. Eentje om de prijs te verhogen en eentje om te verlagen.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • arnietjez
  • Registratie: Juli 2009
  • Laatst online: 23-09-2022
1) Die haakjes doet mijn acces 2000 (ja sorry) er zelf om.
2) Deze haakjes doet acces er ook zelf om
3) Er zijn FABU cursussen met AA AB, etc, het sterretje is zodat hij ze allemaal in 1 keer update.

nu ook na het weghalen van de haakjes staan ze er gewoon weer na een foutmelding te krijgen.

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Nu ik de reactie van Zwippie lees, valt de OR inderdaad nog meer op... Daar doe je ook iets wat niets zal opleveren, je kunt niet in de WHERE (waar dit deel van uitmaakt) zomaar een UPDATE uitvoeren.

Je zou in de UPDATE een CASE kunnen inbouwen en daar bepalen wat er bij welk record moet gebeuren, 2 aparte update-queries zijn echter eenvoudiger te realiseren.

Acties:
  • 0 Henk 'm!

  • Cascade
  • Registratie: Augustus 2006
  • Laatst online: 16-09 11:44
cariolive23 schreef op donderdag 09 juli 2009 @ 12:08:
1) Wat doen die blokhaken om [cursusprijs] ?
3) LIKE "FABU*", wat doet dat * daan? Moet dat geen % zijn? Dat is de gebruikelijke schrijfwijze in SQL, maar wellicht wijkt jouw database daar van af. Welke DB gebruik je?
...
Ps. In SQL gebruik je enkele quotes ' en geen dubbele quotes ". Mag je dus ook nog even aanpassen.
Houd er rekening mee dat TS in een Microsoft Access database werkt...

* spuit 11, nevermind.

[ Voor 8% gewijzigd door Cascade op 09-07-2009 12:15 ]


Acties:
  • 0 Henk 'm!

  • Xiphalon
  • Registratie: Juni 2001
  • Laatst online: 15:18
wat de ts wil (gezien zijn vorige topic) is cursusprijs of verlagen met 3% of verhogen met 7% afhankelijk van een waarde in de omschrijving van die cursus.

zal zoiets moeten worden:
SQL:
1
2
3
UPDATE cursus SET cursusprijs = 
  CASE WHEN omschrijving LIKE 'FABU%' THEN (cursusprijs * 0.97) 
  ELSE (cursusprijs * 1,07) END


ofzo

Acties:
  • 0 Henk 'm!

  • arnietjez
  • Registratie: Juli 2009
  • Laatst online: 23-09-2022
zwippie schreef op donderdag 09 juli 2009 @ 12:11:
Volgens mij moet je dit gewoon verdelen over twee queries. Eentje om de prijs te verhogen en eentje om te verlagen.
dit zou mogelijk moeten zijn en geen problemen mogen veroorzaken, het maakt het wel iets moeilijker inderdad maar het moet zo kunnen ;)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ho even, je wil een waarden gelijk maken aan X als conditie P waar is, en anders moet het Y worden? Een update is erop gemaakt om één expressie uit te voeren, niet twee verschillende.

Wat je kan doen in een goeie DBMS:
SQL:
1
2
3
4
UPDATE
    cursus
SET
  CursusPrijs = CASE ProductCode LIKE "FABU%" THEN CursusPrijs * 0.97 ELSE CursusPrijs * 1.07

Die maffe OR-constructie die je hebt verzonnen gaat het in elk geval niet doen. 8)7

edit:
Spuit 11.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • arnietjez
  • Registratie: Juli 2009
  • Laatst online: 23-09-2022
darkmage schreef op donderdag 09 juli 2009 @ 12:14:
wat de ts wil (gezien zijn vorige topic) is cursusprijs of verlagen met 3% of verhogen met 7% afhankelijk van een waarde in de omschrijving van die cursus.

zal zoiets moeten worden:
SQL:
1
2
3
UPDATE cursus SET cursusprijs = 
  CASE WHEN omschrijving LIKE 'FABU%' THEN (cursusprijs * 0.97) 
  ELSE (cursusprijs * 1,07) END


ofzo
UPDATE cursus SET cursus.CursusPrijs =
CASE WHEN cursus.ProductCode LIKE "FABU%" THEN (cursusprijs * 0.97)
WHEN (cursusprijs * 1.07) END


^Operator ontbreekt :( bij "CASE WHEN"

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je zult eerst eens naar de syntax van SQL moeten kijken. We hebben hier op got ook een goede F.A.Q. SQL F.A.Q.

Verder ben je in je vorige topics ook al gewezen op het feit dat we wat meer inzet van een TS willen. Met een goed boek kun je waarschijnlijk al een heel eind komen.

Lees A.U.B. ook even de Quickstart eens goed door.

Overigens hebben we hier ook Code tags, gebruik die in het vervolg dan ook : Hoe post je code? / Hoe gebruik je de code tag?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik heb even mijn code verbeterd zodat je er wat aan hebt. :P
SQL:
1
2
3
4
UPDATE
    cursus
SET
  CursusPrijs = CASE SUBSTRING(ProductCode,1, 4) WHEN "FABU" THEN CursusPrijs * 0.97 ELSE CursusPrijs * 1.07 END

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.