Avatar billede repsak Nybegynder
09. september 2003 - 13:20 Der er 19 kommentarer og
1 løsning

Fejl i syntaks

Hvorfor er der SQL syntaks fejl i følgende?

SELECT * FROM course WHERE teacherID = (SELECT initials FROM teacher WHERE firstname = 'Viggo');

------------------
ERROR 1064: You have an error in your SQL syntax.  Check the manual that corresp
onds to your MySQL server version for the right syntax to use near 'SELECT initi
als FROM teacher WHERE firstname = 'Viggo')' at lin
Query OK, 0 rows affected (0.00 sec)
Avatar billede di8leva Nybegynder
09. september 2003 - 13:23 #1
ved det ikke sækert, men nær vi brugte MySQL så kunde den inte hantera "nestled selects", det var dærfør vi slutade bruge den.

ved du att den versionen du bruger kan hantera det?
Avatar billede repsak Nybegynder
09. september 2003 - 13:27 #2
hmm oki, men jeg har lige downloadet den fra mysql.com, så det skulle være den nyeste version. (burde den ikke kunne håndtere 'nestede selects')?
Avatar billede jinxit Nybegynder
09. september 2003 - 13:34 #3
Jeg mener ikke du kan bruge '=' foran et subselect, brug istedet 'IN'.

Eller bedre endnu omskriv dit query til

SELECT course.*
FROM course, teacher
WHERE course.teacherID = teacher.initials AND teacher.firstname = 'Viggo';

Det er langt mere effektiv da MySQL ikke kan optimere subselects særlig godt.
Avatar billede arne_v Ekspert
09. september 2003 - 13:34 #4
Nej.

Den feature er en del af version 4.1 som kun er i beta !
Avatar billede arne_v Ekspert
09. september 2003 - 13:35 #5
Avatar billede repsak Nybegynder
09. september 2003 - 14:09 #6
Hmmm som jeg læser arne_v's link så kan man ikke lave subqueries??? Hvis det er rigtigt forstået så er man da på den hvis man skal lave en forespørgsel som jeg vil...
Avatar billede jinxit Nybegynder
09. september 2003 - 14:10 #7
Hvorfor omskriver du det ikke bare som jeg har foreslået?
Avatar billede arne_v Ekspert
09. september 2003 - 14:14 #8
MySQL er hurtigt men ikke særligt god i SQL dialekt.

Ofte kan man omskrive sin query.

Se f.eks. her:

http://www.mysql.com/doc/en/ANSI_diff_Subqueries.html

Andre gange bliver man nødt til at flytte lidt logik fra sin SQL til
sin applikation.
Avatar billede repsak Nybegynder
09. september 2003 - 16:05 #9
jinxit -> det kan jeg også godt (*kan bare ikke overskue at omskeive alle mine queries da nogle af dem er RET lange - desuden har jeg ikke adgang til DB før imorgen :-)*)

arne_v -> hvordan mener du? Vil SQL'en ikke bliv opfattet på samme måde?
Avatar billede arne_v Ekspert
09. september 2003 - 16:17 #10
Alle database har en forskellig SQL dialekt.

MySQL's dialekt er lidt tynd på funktionalitet.

Derfor er der en del SQL som virker på andre database der ikke
virker med MySQL.

Man kan så enten omskrive sin SQL hvis det er muligt (det er det ikke
altid) eller flytte logik fra SQL til applikation (i.s.f. en query
som returnerer det man vil have, så laver man f.eks. flere queries
og lader applikationen processe data).
Avatar billede repsak Nybegynder
09. september 2003 - 16:22 #11
ok I understand... Jeg vender tilbage imorgen :-)
Avatar billede repsak Nybegynder
10. september 2003 - 09:36 #12
jinxit -> jepsen din omskrivning virker perfekt :-), men for at være ærlig så er jeg ikke helt med på teorien. (måske er det mig som stener) Jeg har også følgende query: "SELECT DISTINCT * FROM pupil WHERE id = (SELECT pupil_id FROM pupil_course WHERE courseID = (SELECT courseID FROM course WHERE teacherID = (SELECT initials FROM teacher WHERE firstname = 'Viggo')));" hvordan skal det så skrives???

arne_v -> jeg har lige prøvet at lave et nested query igennem phpadmin (mysql 4.0) det virker (???)
Avatar billede arne_v Ekspert
10. september 2003 - 09:53 #13
Øh.

Så forstår jeg ikke noget.
Avatar billede repsak Nybegynder
12. oktober 2003 - 11:58 #14
hvorfor kan jeg ikke acceptere svaret herinde???
Avatar billede arne_v Ekspert
12. oktober 2003 - 12:56 #15
Det hænder.

En fejl i Eksperten.
Avatar billede arne_v Ekspert
12. oktober 2003 - 12:57 #16
Nu ligger jeg et svar.

Så kan du afvise mit svar og acceptere jinxits svar.

(det har ihvertfald virket nogle gange)

Husk at afvise mit svar !
Avatar billede repsak Nybegynder
12. oktober 2003 - 12:57 #17
hmm ok, men der blir desværre ikke givet points herinde så :-(
Avatar billede repsak Nybegynder
12. oktober 2003 - 12:58 #18
ahh thats better ;-)
Avatar billede arne_v Ekspert
12. oktober 2003 - 12:59 #19
Spørg mig ikke hvorfor - men det er set nogle gange før.
Avatar billede repsak Nybegynder
12. oktober 2003 - 13:02 #20
hehe ok så lader jeg være med det
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
Computerworld tilbyder specialiserede kurser i database-management

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