Toon posts:

Wat is er mis met deze query?? 2

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

Verwijderd

Topicstarter
Sorry hoor voor de lame uitleg,..nu wat duidelijker

(natuurlijk heb ik al het web afgezocht alvorens ik hier de boel ga vervuilen met dit misschien wel wat simpele vraagje,..ik kom er gewoon echt niet uit. Op het web vind ik alleen maar update queries op/met 1 tabel)

Update eind_exp set telefoon = null
where??? in telnrs,eind_exp where telnrs.klantnr = eind_exp.klantnr

De foutmelding geeft niet meer info dan "MySQL said: You have an error in your SQL syntax"

Er zijm 2 tabellen, 1 met gebruikers , en een met alleen klantnrs. Ik wil dat in de tabel met gebruikers de telefoonnrs worden verwijderd als het klantnr in de tabel gebruikers overeenkomt met een klantnr in die andere tabel.

Beter kan ik het niet uitleggen....

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Kan MySQL niet...

Tenminste niet in 1 query

Programmer - an organism that turns coffee into software.


Verwijderd

Bij SQL Server kan het ook niet. Update Queries kunnen (vanwege de integriteit van de database) maximaal op 1 tabel worden uitgevoerd. Anders zul je gebruik moeten maken van stored procedures.

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
Update eind_exp set telefoon = null
where??? in telnrs,eind_exp where telnrs.klantnr = eind_exp.klantnr
:?

vind ik toch maar een rare where clause hoor
Er zijm 2 tabellen, 1 met gebruikers , en een met alleen klantnrs. Ik wil dat in de tabel met gebruikers de telefoonnrs worden verwijderd als het klantnr in de tabel gebruikers overeenkomt met een telefoonnr in die andere tabel.
wat hebben klantnummer en telefoonnummers met elkaar gemeen :?

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


Verwijderd

Topicstarter
Sorry, was een tiepfout,...


ik bedoel dus telefoon deleten/leeggooien in de gebruikers tabel als het bijbehorende klantnr voorkomt in die andere tabel.

Verwijderd

Topicstarter
Damn jullie zijn echt SNEL met posten,..kon het niet op tijd verbeteren ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
Je kunt daarvoor subqueries gebruiken, maar MySQL ondersteund dat niet.
Wat je kunt doen, is bv eerst alle klantnummers ophalen uit die ene tabel. Die id's in een komma-separated string gooien.
Zo dus bv: (1, 2, 3, 4)
En dan uw update als volgt schrijven:
code:
1
2
3
UPDATE tabel
SET    telefoonnr = null
WHERE klantnr in (1, 2, 3, 4)

https://fgheysels.github.io/


  • leonardo1504
  • Registratie: April 2001
  • Niet online
Een goed boek over SQL kan een kwaad lijkt me, want een join is geen update :-). Oftewel, ik denk dat hier de structuur (de S dus) van een query in SQL niet wordt begrepen.
code:
1
2
3
Update eind_exp set telefoon = null
where ??? in telnrs,eind_exp 
where telnrs.klantnr = eind_exp.klantnr

Lijkt me niet dat je twee keer een WHERE clause in je UPDATE statement mag zetten.

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 10:02

Dido

heforshe

Dus wat je wilt is
code:
1
2
3
UPDATE eind_exp
SET telefoon = NULL
WHERE klantnr IN ( SELECT klantnr FROM telnrs)

Maar dat gaat dacht ik niet in MySQL :(

Wat betekent mijn avatar?


  • leonardo1504
  • Registratie: April 2001
  • Niet online
Topicstarter bedoelt geen update over twee tabellen, maar een update van de records in de tabel die je met de volgende query selecteert:
code:
1
2
SELECT E.* from eind_exp E, telnrs T 
WHERE T.telnrs=E.telnrs AND T.klantnr=E.klantnr

correct me if I'm wrong

/edit
ok goed gezien nu staat er nog maar 1 WHERE

Verwijderd

Topicstarter
Nope, Simpel gezegt::

Komt klantnr in gebruikerstabel voor in de andere tabel > in gebruikerstabel telefoonnr op Null zetten

(in de 'andere' tabel staat maar 1 kolum,..en de bewerking vind dan ook alleen plaats in de gebruikers tabel)

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 10:02

Dido

heforshe

Lijkt me niet dat je twee keer een WHERE clause in je UPDATE statement mag zetten.
code:
1
2
SELECT E.* from eind_exp E, telnrs T WHERE
WHERE T.telnrs=E.telnrs AND T.klantnr=E.klantnr

Doe het dan ook niet >:)

Beatmaster: Ik denk dat Whoami's oplossing het beste werkt... het is een beetje omslachtig, maar ja, zonder subqueries moet je wat.

Wat betekent mijn avatar?


  • leonardo1504
  • Registratie: April 2001
  • Niet online
Op woensdag 03 juli 2002 17:36 schreef beatmaster het volgende:
Nope, Simpel gezegt::

Komt klantnr in gebruikerstabel voor in de andere tabel > in gebruikerstabel telefoonnr op Null zetten

(in de 'andere' tabel staat maar 1 kolum,..en de bewerking vind dan ook alleen plaats in de gebruikers tabel)
OK volgens mij is je datamodel dan niet in orde. Je hebt dus:

gebruiker ........ eindexp
--------- ........ -------
klantnr ............. klantnr
telnr

en dat is het????

Verwijderd

Topicstarter
Shit ben ik weer niet duidelijk geweest! }:O

eind_exp======telnrs
------- ====== -----
Klantnr ======klantnr
Telnr


Thats it....
(nornaal noem ik eind_exp 'gebruikers'......pfff lange dag)

Verwijderd

Topicstarter
Nah ik ben nog zelf een beetje aant klooten geweest.

Onderstaande query werkt ook niet! Leuke is dat het error veldje volledig leeg blijft. (en dit is nog zonder update)

SELECT eind_exp.* FROM eind_exp LEFT JOIN telnrs ON eind_exp.klantnr=telnrs.klantnr;

Ook vertelde iemand me dat het helemaal niet mogelijk is subselects of join uit te voeren in mysql. Lijkt me onzin toch? Waarom anders 2 tabellen gebruiken.

Hoe dan ik hoop nog een beetje op hulp *D

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 10:02

Dido

heforshe

Maar heb je Whoami's oplossing al geprobeerd?

Wat betekent mijn avatar?


Verwijderd

Op donderdag 04 juli 2002 10:00 schreef beatmaster het volgende:
Nah ik ben nog zelf een beetje aant klooten geweest.

Onderstaande query werkt ook niet! Leuke is dat het error veldje volledig leeg blijft. (en dit is nog zonder update)

SELECT eind_exp.* FROM eind_exp LEFT JOIN telnrs ON eind_exp.klantnr=telnrs.klantnr;

Ook vertelde iemand me dat het helemaal niet mogelijk is subselects of join uit te voeren in mysql. Lijkt me onzin toch? Waarom anders 2 tabellen gebruiken.

Hoe dan ik hoop nog een beetje op hulp *D
Als die select geen fout nog resultaten oplevert heb je te maken met een data probleem. MySQL doet inderdaad geen sub-queries, maar wel degelijk joins.

Ook ik denk dat je gewoon niet te moeilijk moet doen en whoami's oplossing moet aanpakken.

Verwijderd

Topicstarter
Ben ik dus mee aan de slag geweest.

bijv.

UPDATE eind_exp
SET telefoon=null
WHERE (klantnr ='1943GA35' and klantnr = '
1092LA60' and klantnr = '
7270AA40' and klantnr = '
1052KW6' and klantnr = '
6361EK89' and klantnr = '
5482JD83' and klantnr = '
6171HS45')

Deze veranderd alleen het eerst telefoon nummer.

Ook met de 'or' geprobeerd wil ook niet lukken.

Gewoon achter elkaar zetten met een komma er tussen ook niet.

Het principe werkt dus alleen hij zou door moeten lopen ,..als een soort while lus.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 07:04

gorgi_19

Kruimeltjes zijn weer op :9

En als je combineert met de IN-functie:
code:
1
Where klantnummer IN ('1','2')

Let trouwens wel op het datatype (string vs. integer), staan er geen spaties achter de string ?(dus het telefoonnummer staat als '123 ' i.p.v. '123' in de database?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
Op donderdag 04 juli 2002 15:51 schreef beatmaster het volgende:
Ben ik dus mee aan de slag geweest.

bijv.

UPDATE eind_exp
SET telefoon=null
WHERE (klantnr ='1943GA35' and klantnr = '
1092LA60' and klantnr = '
7270AA40' and klantnr = '
1052KW6' and klantnr = '
6361EK89' and klantnr = '
5482JD83' and klantnr = '
6171HS45')

Deze veranderd alleen het eerst telefoon nummer.

Ook met de 'or' geprobeerd wil ook niet lukken.

Gewoon achter elkaar zetten met een komma er tussen ook niet.

Het principe werkt dus alleen hij zou door moeten lopen ,..als een soort while lus.
Tuurlijk werkt een and niet, want er zal geen enkel record zijn dat voldoet aan klantnr = x and klantnr = y and klantr = z..
Een OR zou wel moeten werken, ook al zeg je dat hij niet werkt. :P
En een IN moet ook werken. Volgens mij moet je even een cursus SQL volgen.
code:
1
WHERE klantnr IN (1, 2, 3)

https://fgheysels.github.io/


Verwijderd

Stappenplan dan maar?
1) Doe de volgende query:
code:
1
2
select klantnr
from eind_exp

2) lees deze klantnummers in een array in

3) bouw dynamisch de volgende query op:
code:
1
2
3
4
UPDATE eind_exp
SET telefoon=null
WHERE klantnr IN
(1, 2, 3, 4, ..., x)

Daarbij is het stuk "(1, 2, 3, 4, ..., x)" dus dynamisch, door in een lus alle klantnummers uit de array van stap 2 te lopen en ze tussen haakjes te zetten

4) run de query van stap 3

5) klaar is klara!

edit:
/me high5's whoami :7

Verwijderd

Topicstarter
Mr X,..

Arrays maken? Kweet ff niet hoe ;)

Ik zit hier (online) te werken, das juist het id. Deze hele bewerking zou een HELE hoop werk kunnen besparen in de toekomst,normaal moet ik die (60.000 records) steeds downen en uppen. klooien in acces... Vandaar.

Maar volgens mij set je alle telefoonnrs op null als ik jouw voorstel logisch doorloop. Toch?

Je selecteerd met die array namelijk eerst alle klantnrs en op die klantnrs wil je vervolgens met behulp van die 2e query het veld telefoon op null zetten. Dus zet je toch ALLE telefoonrs op null !?

Or have i lost it completely?

oh ennuh string kan ik niet vinden,..hij staat nu op varchar. Is dat ook goed?

Forgive me for being a newbie ;(

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
Op donderdag 04 juli 2002 16:36 schreef beatmaster het volgende:
Mr X,..

Arrays maken? Kweet ff niet hoe ;)
Tutorial lezen. :)
Ik zit hier (online) te werken, das juist het id. Deze hele bewerking zou een HELE hoop werk kunnen besparen in de toekomst,normaal moet ik die (60.000 records) steeds downen en uppen. klooien in acces... Vandaar.

Maar volgens mij set je alle telefoonnrs op null als ik jouw voorstel logisch doorloop. Toch?
Je selecteerd met die array namelijk eerst alle klantnrs en op die klantnrs wil je vervolgens met behulp van die 2e query het veld telefoon op null zetten. Dus zet je toch ALLE telefoonrs op null !?
Dan zorg je ervoor dat die eerste query enkel de klanten selecteert vanwie het telefoonnr mag verwijderd worden. :z
oh ennuh string kan ik niet vinden,..hij staat nu op varchar. Is dat ook goed?
Ja, wederom een tutorial lezen.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 07:04

gorgi_19

Kruimeltjes zijn weer op :9

oh ennuh string kan ik niet vinden,..hij staat nu op varchar. Is dat ook goed?
Doelde er mee te zeggen dat er een hele grote kans bestaat dat er in je datbase staat: '1234 ' (Let op de spaties!); en dit is ongelijk aan '1234' . Dat is het nadeel van varchar; deze moet je dan eventueel trimmen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 10:02

Dido

heforshe

Op donderdag 04 juli 2002 16:36 schreef beatmaster het volgende:
Maar volgens mij set je alle telefoonnrs op null als ik jouw voorstel logisch doorloop. Toch?
Nee, je selecteert alle klantnummers uit je ene tabel, en zet dan de telnrs op NULL in je andere tabel waarvan de klantnrs voorkomen in die eerste tabel. Dat is toch wat je wilde?

Mijn eerste oplossing met subquery zou ook werken met echte SQL, maar aangezien jhe geen subqueries kunt gebruiken doe je het dus in twee stappen zodat je de gegevens uit je eerste tabel (alleen de klantnummers dus) al hebt en niet tijdens de update query uit je tabel hoeft te halen.

Wat betekent mijn avatar?


Verwijderd

Op donderdag 04 juli 2002 16:36 schreef beatmaster het volgende:
Mr X,..

Arrays maken? Kweet ff niet hoe ;)

Ik zit hier (online) te werken, das juist het id. Deze hele bewerking zou een HELE hoop werk kunnen besparen in de toekomst,normaal moet ik die (60.000 records) steeds downen en uppen. klooien in acces... Vandaar.
Uhm ... nu raak je mij even kwijt. Zit je alleen met een query tool te werken op de MySQL database, of heb je een programmeertaal waarmee je de MySQL aanspreekt tot je beschikking? En wat heeft Access hier nou weer mee te maken?
Maar volgens mij set je alle telefoonnrs op null als ik jouw voorstel logisch doorloop. Toch?

Je selecteerd met die array namelijk eerst alle klantnrs en op die klantnrs wil je vervolgens met behulp van die 2e query het veld telefoon op null zetten. Dus zet je toch ALLE telefoonrs op null !?

Or have i lost it completely?
In je eerste post suggereer je zelf dat van alle klantnummers die in tabel 'eind_exp' zitten in de tabel 'telnrs' de kolom 'telefoon' op Null gezet moet worden, en dat is precies wat in het stappenplan staat.
oh ennuh string kan ik niet vinden,..hij staat nu op varchar. Is dat ook goed?
Ook deze opmerking doet mij vrezen dat je het dus niet hebt over een programmeertaal maar puur over een SQL interface, en da's slecht nieuws.
Forgive me for being a newbie ;(
Zo zijn we allemaal begonnen don't worry. Alleen krijg ik nu een donkerbruin vermoeden dat er wat miscommunicatie is over wat jij precies wil en welke tools je tot je beschikking hebt.

Verwijderd

Topicstarter
Op donderdag 04 juli 2002 16:38 schreef whoami het volgende:

Dan zorg je ervoor dat die eerste query enkel de klanten selecteert vanwie het telefoonnr mag verwijderd worden. :z
Dat is juist waar deze hele topic over gaat.

Natuurlijk ben ik ook bezig (geweest) met tutorials ik kom er alleen niet uit.

Er staan absoluut nergens spaties.

Verwijderd

Topicstarter
YES MRX !! :D

Miscommunicatie is hier zeker het woord.

Ok samenvattend:

eind_exp......telnrs
--------......-------
klantnr.......klantnr
telefoon

Eind_exp staat vol met gegevens, telnrs heeft alleen het veld klantnr. De tabel telnrs hebbik volgegooid met klantnrs waarvan ik weet dat het telefoonnummer incorrect is en dus in eind_exp op null gezet kan worden.

Maw: komt klantnr in eind_exp overeen met een klantnr in telnrs dan mag het veld Telefoon in eind_exp op null gezet worden.

Ik werk op de achterkant van een website op een mysql server. Alles wat ik doe (online) gebeurt via een klein pus invoer veldje (internet explorer) waar ik wat text (sql) kan inkloppen. Geen query tools of wat dan ook.

Normaal trek ik die tabellen omlaag en bewerk ik ze in Acces (vandaar dat ik acces noemde) alleen zijn ze inmiddels zo groot dat ik regelmatig server time-outs krijg en het dus een ideale oplossing is om dit soort klein onderhoud 'online' te doen. Tabellen splitten werkt ook niet lekker namelijk.

Inderdaad alleen een sql-interface :'(

Verwijderd

/me voelt een kwartje vallen ;)

Als ik jou was zou ik een simpele webpage maken om dit te doen, die je vervolgens dan afschermt met een password, want met alleen een SQL interface wordt het niet handig.

Het kan wel, met een beetje kunst-en-vliegwerk ...

Stappenplan:
1) run de volgende query:
code:
1
2
SELECT Concat(klantnr, ', ') AS klant
FROM telnrs

Als resultaat krijg je dan zoiets:
code:
1
2
3
4
5
6
7
klant
------
1, 
2, 
3, 
4, 
5,

2) maak een nieuwe query asl volgt:
a) typ het begin van de query
code:
1
2
3
4
UPDATE eind_exp
SET telefoon = Null
WHERE klantnr IN
(

en zet vervolgens met copy & paste de resultaten van je eerste query (zonder kolomnaam natuurlijk) eronder, waarna je de laatste comma vervangt met een haakje.

Dan krijg je dus dit:
code:
1
2
3
4
5
6
7
8
9
UPDATE eind_exp
SET telefoon = Null
WHERE klantnr IN
(
1, 
2, 
3, 
4, 
5)

3) runnen maar!

Als het goed is zou dat het moeten doen.

Enjoy :)

Verwijderd

Topicstarter
Bedankt voor je tijd overigens Mr X!

Zoiets dus: (de eindquery is dit dus)

UPDATE eind_exp
SET telefoon=null
WHERE klantnr in ('1943GA35','
1092LA60','
7270AA40','
1052KW6','
6361EK89','
5482JD83','
6171HS45')

Dan doet ie alleen het eerste klantnr en dan kapt ie ermee.
Ook de klantnrs zonder ' zetten maakt niet uit.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:56
Op vrijdag 05 juli 2002 13:29 schreef beatmaster het volgende:
Bedankt voor je tijd overigens Mr X!

Zoiets dus: (de eindquery is dit dus)

UPDATE eind_exp
SET telefoon=null
WHERE klantnr in ('1943GA35','
1092LA60','
7270AA40','
1052KW6','
6361EK89','
5482JD83','
6171HS45')

Dan doet ie alleen het eerste klantnr en dan kapt ie ermee.
Ook de klantnrs zonder ' zetten maakt niet uit.
Onmogelijk volgens mij, tenzij het klantnummers zijn die niet bestaan?
Doe het anders eens met een OR ipv IN
code:
1
WHERE klantnr = '109bla' OR klantnr = 'bla2'...

Wordt klantnummer in een alfanumeriek veld opgeslagen, dan moeten er quotes rond. Worden ze in een numeriek veld opgeslagen dan niet.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ROCK & ROLL!!!!!!!!!!!! Het werkt! :D

Mijn dank is groot MR X & WHOAMI,..

Youve made my day!

Ik zit al een halve dag op kosten van de baas te kloten,..ben blij dat het uiteindelijk werkt. Zo heb ik voortaan een goed excuus als ik weer eens hier aant surfen ben.

Dit gaat mij een HELE hoop werk besparen. :7

Tweakers.net Roeleert!
Pagina: 1