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--
Annonceindlæg fra Novataris
28. november 2003 - 13:09
#1
Hvis kurmanid er af typen tal skal du ikke have pinger rundt om variablen
28. november 2003 - 13:10
#2
Jo, det skal jeg når det er en MySQL database...
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 ;-)
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 )
28. november 2003 - 13:15
#5
Jeg får samme fejl uanset om jeg bruger dit første eller andet forslag... :(
28. november 2003 - 13:16
#6
Så prøv og fjern de pinger
28. november 2003 - 13:16
#7
Det har jeg prøvet... Samme fejl....
28. november 2003 - 13:18
#8
Prøv at skriv din sætning ud lige før du udfører den...
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
28. november 2003 - 13:22
#10
Du skalfjerne kursubid lige efter where - det havde jeg heller ikke på...
28. november 2003 - 13:23
#11
Altså: SQL = "DELETE FROM kurpart WHERE exists(SELECT id FROM kursub WHERE kurmainid = " & nid & ")"
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 & ")?
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 & ")"
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
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.
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å ?
Slettet bruger
28. november 2003 - 13:31
#17
er du sikker på at du har et felt kurmainid i tabellen kursub?
28. november 2003 - 13:32
#18
Ja, det er jeg sikker på, men kurmainid findes ikke i kurpart....
Slettet bruger
28. november 2003 - 13:35
#19
Og du har også et felt som hedder id i tabellen kursub?
28. november 2003 - 13:35
#20
mySQL mysqld-3.23.57 kan ikke lave sub select. du skal bruge version 4.0 ->
28. november 2003 - 13:35
#21
Er ID et reseveret ord i mysql ?
28. november 2003 - 13:36
#22
>>mrjowns Hvad sagde den inderste sætning ??
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...???
28. november 2003 - 13:40
#24
Jeg har prøvet at sætte id i [] men det hjælper ikke - stadig samme fejl...
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 )"
28. november 2003 - 13:42
#26
UPS, jeg tror ikke du behøver ,kurpart i den inderste...
28. november 2003 - 13:42
#27
Chris > jeg dkal delete, ikke selecte...
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..
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
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
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
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...
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
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 ->
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
28. november 2003 - 13:56
#36
Ikke kan - MySQL db'en ligger hos Wannafind (Webhotel)...
28. november 2003 - 13:57
#37
Det er da dybt oldnordisk ! Skæld dem ud ;-)
28. november 2003 - 13:58
#38
Hehe, du har ret!!!! Det vil jeg gøre!!! :-)
28. november 2003 - 13:58
#39
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)
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
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)
28. november 2003 - 14:05
#43
Jeg tester lige og vender så tilbage...
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 ;-)
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...
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
28. november 2003 - 14:11
#47
det er hermed gjort :-)
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!!
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
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 ?
28. november 2003 - 14:18
#51
DOH, tja det man bliver blind på først er jo ... øhhh, vist øjnene... TAK!!!
Kurser inden for grundlæggende programmering