Avatar billede josto Nybegynder
12. juli 2004 - 18:07 Der er 8 kommentarer og
1 løsning

Select med NOT

Hej

Jeg har et problem med at lave en select sætning. Problemet kan løses i PHP, men det ville jo være pænest at lave det i SQL 

Der findes bl.a. disse tabeller:
----------------------------------
Users:
ID – Primary key
Name
Username
Group – ref. til Group.ID
----------------------------------
Group:
ID - PK
Name (”Elev”, ”Underviser”, osv.)
----------------------------------
Student_Teacher:
ID – PK
Student_id – ref. til Users.ID
Teacher_id – ref. til Users.ID
----------------------------------

Jeg har en side med en form, hvorpå der findes to Select bokse:
1. De elever som findes på systemet, men som underviseren IKKE har tilknyttet (Dette er mit problem)
2. De elever som underviseren har tilknyttet (Det virker fint)

Men to knapper kan man flytte rundt mellem de to bokse (Det virker fint)

Problemstillingen er så:

Hvordan finder jeg alle elever, for derefter at frasorterer de som underviser har tilknyttet i (helst) en select sætning?

SELECT Users.Name FROM Users WHERE [Får alle elever med] NOT [Dem som underviser har tilknyttet]

Da jeg ikke har arbejdet med dette før, ved jeg ikke, hvad jeg skal søge efter i Google.
Håber at nogle kan hjælpe.
Avatar billede jaw Nybegynder
12. juli 2004 - 18:11 #1
Kan du ikke bruge != ?
Avatar billede Slettet bruger
12. juli 2004 - 19:57 #2
Prøv:

SELECT Users.Name FROM Users
WHERE Users.ID NOT IN (SELECT Studrnt_id FROM Studen_Teacher)
Avatar billede josto Nybegynder
14. juli 2004 - 17:54 #3
Det var godt vejr!? - så jeg kom ikke ind i går :)

Jeg prøver dit forslag rahp.
Avatar billede josto Nybegynder
14. juli 2004 - 19:05 #4
Idéen ser rigtig ud, men jeg kan ikke få det til at virke som ønsket.

Databasen er i øjeblikket:

2 elever: ID = 4  name = Peter og ID = 6, name = Hans

Lærer med ID = 3 har tilknyttet elev nr. 4.

Derved skulle queryen gerne give elev nr. 6 tilbage.

Den ene query:
SELECT lh_users.ID, lh_users.name
FROM lh_users
WHERE lh_users.ID NOT
IN (
'4'
) AND ( lh_users.group_id =10 )

group_id = 10 sikre at det kun er eleverne der bliver fundet. Den viste opbygning virker fint.


Denne query finder de elever som lærer nr. 3 har tilknyttet. Denne virker også fint og finder elver nr. 4.

SELECT lh_student_teacher.student_id
FROM lh_student_teacher
WHERE lh_student_teacher.teacher_id = '3'

Når jeg sætter dem sammen får jeg følgede query:

SELECT lh_users.ID, lh_users.name
FROM lh_users
WHERE lh_users.ID NOT
IN (
SELECT lh_student_teacher.student_id
FROM lh_student_teacher
WHERE lh_student_teacher.teacher_id = '3'
) AND ( lh_users.group_id =10 )

Når den bliver kørt I phpMyAdmin mod serveren får jeg en fejl:

Fejl
SQL-forespørgsel : 
SELECT lh_users.ID, lh_users.name
FROM lh_users
WHERE lh_users.ID NOT
IN (

SELECT lh_student_teacher.student_id
FROM lh_student_teacher
WHERE lh_student_teacher.teacher_id = '3'
) AND (
lh_users.group_id =10
)
LIMIT 0 , 30
MySQL returnerede:
#1064 - You have an error in your SQL syntax near 'SELECT lh_student_teacher.student_id
FROM lh_student_teacher
WHERE lh_student_te' at line 5


Hvad har jeg overset?
Avatar billede Slettet bruger
14. juli 2004 - 22:11 #5
Den burde være god nok i følge: http://dev.mysql.com/doc/mysql/en/ALL_subqueries.html
Avatar billede Slettet bruger
14. juli 2004 - 22:15 #6
Hvad med en lidt ændret udgave:
SELECT ID FROM lh_users
WHERE group_id = 10
AND ID NOT IN (
SELECT student_id
FROM lh_student_teacher
WHERE teacher_id = '3'
)
Avatar billede josto Nybegynder
15. juli 2004 - 10:43 #7
Hej  rahp

Mysteriet er nu løst!

Dine forslag var rigtige – så læg et svar.

Desværre ser det ud til at man ikke kan bruge subqueryes før i version 4.1. Mit webhotel bruger version 3.23 så det forklarer hele problemet.

Hvis nogle savner kilder er de her:

http://forums.devshed.com/archive/t-126998
http://forums.devshed.com/archive/t-151047
http://dev.mysql.com/doc/mysql/en/Nutshell_4.1_features.html

Takker for hjælpen – jeg må nok til at lave en workaround i PHP.

josto
Avatar billede Slettet bruger
15. juli 2004 - 11:16 #8
Du må få dit webhotel til at opgraderer ;-)
Avatar billede josto Nybegynder
16. juli 2004 - 15:58 #9
Da der ikke er kommet noget svar, lukker jeg her.
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