Avatar billede mrjowns Novice
28. november 2003 - 12:54 Der er 49 kommentarer og
2 løsninger

DELETE fra MySQL tabel

Hej Eksperter,

Jeg har denne sql-sætning, men kan ikke få det til at virke:

SQL = "DELETE FROM kurpart WHERE kursubid IN (SELECT id FROM kursub WHERE kurmainid = '" & nid & "')"
MySQLConn.Execute(SQL)

Jeg får følgende fejlbesked:

[MySQL][ODBC 3.51 Driver][mysqld-3.23.57]You have an error in your SQL syntax near 'SELECT id FROM kursub WHERE kurmainid = '6')' at line 1

Er det forklaring nok? Kan nogen hjælpe?

--jowns--
Avatar billede chriscross Nybegynder
28. november 2003 - 13:09 #1
Hvis kurmanid er af typen tal skal du ikke have pinger rundt om variablen
Avatar billede mrjowns Novice
28. november 2003 - 13:10 #2
Jo, det skal jeg når det er en MySQL database...
Avatar billede chriscross Nybegynder
28. november 2003 - 13:11 #3
På den anden side kan det også være du skal lave helt om på din syntaks..

SQL = "DELETE FROM kurpart WHERE exists(SELECT id FROM kursub WHERE kurmainid = '" & nid & "')"

Prøv at lave en select på ovenstående først ;-)
Avatar billede chriscross Nybegynder
28. november 2003 - 13:12 #4
Den har jeg ikke hørt før - jeg tror du tager fejl, men prøv at fjen dem, hvis du stadig for fejl kan du prøve løsning 2 ( den med exists )
Avatar billede mrjowns Novice
28. november 2003 - 13:15 #5
Jeg får samme fejl uanset om jeg bruger dit første eller andet forslag... :(
Avatar billede chriscross Nybegynder
28. november 2003 - 13:16 #6
Så prøv og fjern de pinger
Avatar billede mrjowns Novice
28. november 2003 - 13:16 #7
Det har jeg prøvet... Samme fejl....
Avatar billede chriscross Nybegynder
28. november 2003 - 13:18 #8
Prøv at skriv din sætning ud lige før du udfører den...
Avatar billede mrjowns Novice
28. november 2003 - 13:21 #9
Hvis jeg prøver denne:

SQL = "DELETE FROM kurpart WHERE kursubid exists(SELECT id FROM kursub WHERE kurmainid = " & nid & ")"

får jeg:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-3.23.57]You have an error in your SQL syntax near 'exists (SELECT id FROM kursub WHERE kurmainid = 6)' at line 1
Avatar billede chriscross Nybegynder
28. november 2003 - 13:22 #10
Du  skalfjerne kursubid lige efter where - det havde jeg heller ikke på...
Avatar billede chriscross Nybegynder
28. november 2003 - 13:23 #11
Altså:
SQL = "DELETE FROM kurpart WHERE exists(SELECT id FROM kursub WHERE kurmainid = " & nid & ")"
Avatar billede mrjowns Novice
28. november 2003 - 13:24 #12
Hmmm, hvordan finder "den" så ud af at den kun skal slette rækker fra kurpart hvor kursubid = (SELECT id FROM kursub WHERE kurmainid = " & nid & ")?
Avatar billede chriscross Nybegynder
28. november 2003 - 13:26 #13
det er det du specificerer i din select i parantesen - prøv at sige select først så skal du se:
SQL = "select *  FROM kurpart WHERE exists(SELECT id FROM kursub WHERE kurmainid = " & nid & ")"
Avatar billede mrjowns Novice
28. november 2003 - 13:29 #14
Giver dette resultat:

select * FROM kurpart WHERE exists(SELECT id FROM kursub WHERE kurmainid = 6)
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-3.23.57]You have an error in your SQL syntax near 'exists(SELECT id FROM kursub WHERE kurmainid = 6)' at line 1
Avatar billede chriscross Nybegynder
28. november 2003 - 13:29 #15
Lidt mere forklaring :
Når du bruger exists fortæller du "den" at det du leder efter i den yderste sætning skal eksistere i den inderste sætning.
Avatar billede chriscross Nybegynder
28. november 2003 - 13:31 #16
Prøv at nøjes med at køre den sætning der er inde i parantesen...

Hvad siger den så ?
Avatar billede Slettet bruger
28. november 2003 - 13:31 #17
er du sikker på at du har et felt kurmainid i tabellen kursub?
Avatar billede mrjowns Novice
28. november 2003 - 13:32 #18
Ja, det er jeg sikker på, men kurmainid findes ikke i kurpart....
Avatar billede Slettet bruger
28. november 2003 - 13:35 #19
Og du har også et felt som hedder id i tabellen kursub?
Avatar billede bredum Nybegynder
28. november 2003 - 13:35 #20
mySQL mysqld-3.23.57 kan ikke lave sub select. du skal bruge version 4.0 ->
Avatar billede chriscross Nybegynder
28. november 2003 - 13:35 #21
Er ID et reseveret ord i mysql ?
Avatar billede chriscross Nybegynder
28. november 2003 - 13:36 #22
>>mrjowns

Hvad sagde den inderste sætning ??
Avatar billede mrjowns Novice
28. november 2003 - 13:38 #23
Der skulle ikke være noget problem med den inderste sætning - den række jeg gerne vil have fat i fra kursub er:

id = 11
kurmainid = 6

og i kurpart

id = 56
kursubid = 11

Så det skal virke...???
Avatar billede mrjowns Novice
28. november 2003 - 13:40 #24
Jeg har prøvet at sætte id i [] men det hjælper ikke - stadig samme fejl...
Avatar billede chriscross Nybegynder
28. november 2003 - 13:41 #25
Hvad siger nedenstående

SQL = "select *  FROM kurpart WHERE exists(SELECT kursub.id FROM kursub,kurpart WHERE kurmainid = " & nid & " and kursub.id =kurpart.kursubid )"
Avatar billede chriscross Nybegynder
28. november 2003 - 13:42 #26
UPS, jeg tror ikke du behøver ,kurpart i den inderste...
Avatar billede mrjowns Novice
28. november 2003 - 13:42 #27
Chris > jeg dkal delete, ikke selecte...
Avatar billede chriscross Nybegynder
28. november 2003 - 13:44 #28
Ja, men det kan du vel selv finde ud af at erstatte ? ( det er ret nemt ;-) )

Nå alvorligt talt, det er sgu da bedre at se hvad man selecter før man deleter ellers ender man hurtigt op med for få data..
Avatar billede chriscross Nybegynder
28. november 2003 - 13:46 #29
Har i øvrigt lige spottet bredums svar, så det er vist ingen grund til at fortsætte de der sætninger, da de alligevel ikke virker på din db
Avatar billede mrjowns Novice
28. november 2003 - 13:47 #30
select * FROM kurpart WHERE exists(SELECT kursub.id FROM kursub,kurpart WHERE kurmainid = 6 and kursub.id =kurpart.kursubid )
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-3.23.57]You have an error in your SQL syntax near 'exists(SELECT kursub.id FROM kursub,kurpart WHERE kurmainid = 6 and kursub.id =k' at line 1
Avatar billede chriscross Nybegynder
28. november 2003 - 13:48 #31
Det vil sige at du kan lave to sætninger:
1) et opslag i kursub til at finde din id
2) en delete på den anden tabel med den fundne id fra første
Avatar billede mrjowns Novice
28. november 2003 - 13:50 #32
Kunne man evt. lave det på en anden måde - måske ved hjælp af flere sql-sætninger og en løkke??? Jeg skal bare have det til at virke - skide være med performance...
Avatar billede chriscross Nybegynder
28. november 2003 - 13:52 #33
Prøv:
1) "select id from kursub where kurmainid = " & nid
2) åbn rs1 med ovenstående sql
3) "delete from kurpart where kursubid  = " & rs1("id")

- håber ikke jeg har fået dine id'er forkert i halsen - tjek dem lige
Avatar billede bredum Nybegynder
28. november 2003 - 13:53 #34
Jeg prøver igen!!!!!!!

Du kan ikke med en mySQL version 3.23.57 lave sub select.
du skal opgradere til version 4.0 ->
Avatar billede chriscross Nybegynder
28. november 2003 - 13:55 #35
>> bredum
:o)
Jeg overså den også først - så resultatet bliver to opslag, det er jo så eneste mulighed hvis mrjowns ikke vil opgradere
Avatar billede mrjowns Novice
28. november 2003 - 13:56 #36
Ikke kan - MySQL db'en ligger hos Wannafind (Webhotel)...
Avatar billede chriscross Nybegynder
28. november 2003 - 13:57 #37
Det er da dybt oldnordisk !

Skæld dem ud ;-)
Avatar billede mrjowns Novice
28. november 2003 - 13:58 #38
Hehe, du har ret!!!! Det vil jeg gøre!!! :-)
Avatar billede bredum Nybegynder
28. november 2003 - 13:58 #39
>>chriscross
så er vi enig (",)
se evt. http://www.mysql.com/doc/en/Data_Manipulation.html
Avatar billede chriscross Nybegynder
28. november 2003 - 13:59 #40
>> bredum
:o)


>>mrjowns

Prøv lige den med de to sætninger før du hidser dig op :o)
Avatar billede mrjowns Novice
28. november 2003 - 14:02 #41
Men s[ er der vel ikke andet at g're end dette:

Set rs= Server.CreateObject("ADODB.Recordset")
SQL = "SELECT id FROM kursub WHERE kurmainid = '" & nid & "'"
Set rs = MySQLConn.Execute(SQL)

Do While Not rs.EOF
SQL2 = "DELETE FROM kurpart WHERE kursubid = '" & rs("id") & "'"
MySQLConn.Execute(SQL2)
rs.MoveNext
Loop
Avatar billede chriscross Nybegynder
28. november 2003 - 14:03 #42
Nemlig - det skulle virke på den oldnordiske

Bredum skal have nogle af pointene da vi kunne have rodet rundt i de subselects LÆNGE uden ham :o)
Avatar billede mrjowns Novice
28. november 2003 - 14:05 #43
Jeg tester lige og vender så tilbage...
Avatar billede chriscross Nybegynder
28. november 2003 - 14:06 #44
OK - jeg er til rådighed en hel time endnu :o)

- og så er jeg alvorligt bange for at den går hen og bliver mandag før jeg vender frygteligt tilbage ;-)
Avatar billede mrjowns Novice
28. november 2003 - 14:09 #45
Hehe, det spiller!

Faktisk tror jeg at jeg vil dele pointene mellem jer - vi havde roddet os ud på meget meget dybt vand hvis ikke Bredum var kommet med den ret vitale oplysning! Så Bredum > hvis du gider lave et svar, så vi kan få afsluttet...
Avatar billede chriscross Nybegynder
28. november 2003 - 14:11 #46
>> mrjowns

Godt det virker :o)

Jeg giver dig fuldstændig ret - jeg havde ikke fantasi til at forestille mig en mySql der ikke kunne forstå sub-selects

God weekend
Avatar billede bredum Nybegynder
28. november 2003 - 14:11 #47
det er hermed gjort :-)
Avatar billede mrjowns Novice
28. november 2003 - 14:12 #48
Så skal der sq deles point ud... ;o)

Chris > hvordan checker jeg lige hvilken version af MySQL mit webhotel benytter?

God weekend til jer begge og tak for hjælpen!!
Avatar billede bredum Nybegynder
28. november 2003 - 14:14 #49
thanx 4 point.

>>mrjowns

det kan du se i fejlen siden giver...

[MySQL][ODBC 3.51 Driver][mysqld-3.23.57]You have an error in your SQL syntax near 'SELECT id FROM kursub WHERE kurmainid = '6')' at line 1

din udbyder bruger version 3.23.57
Avatar billede chriscross Nybegynder
28. november 2003 - 14:14 #50
Øh, øv

- laver en fejl og ser hvad der står i fejlmeddelsen...eller få bredum til det ;-)

Alvorligt: Det skal de da skrive, skal de ikke ?
Avatar billede mrjowns Novice
28. november 2003 - 14:18 #51
DOH, tja det man bliver blind på først er jo ... øhhh, vist øjnene... TAK!!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester