2009-10-26 10 views
1

J'ai la requête suivantemySql colonne inconnue

SELECT 
    s.name, 
    s.surname, 
    s.id_nr, 
    s.student_nr, 
    s.createdate, 
    s.enddate, 
    (SELECT count(*) FROM Student_Attendance WHERE absent = 1) AS count_absent 
    FROM 
    Student AS s, 
    Student_Contact AS sc, 
    Student_Payment AS p, 
    Student_Courses AS scou, 
    Modules AS m, 
    Student_Certificate AS scer, 
    Student_Results AS sr, 
    Lecturer_Profile AS l, 
    Lecturer_Comments AS lc, 
    Student_Attendance AS sa, 
    Student_Training AS t 
    WHERE s.s_id = sc.s_id 
    AND s.s_id = p.s_id 
    AND s.s_id = scou.s_id 
    AND scou.c_id = m.c_id 
    AND s.s_id = scer.s_id 
    AND s.s_id = sr.s_id 
    AND s.s_id = lc.s_id 
    AND lc.l_id = l.l_id 
    AND s.s_id = sa.s_id 
    AND LOWER(s.name) = 'andile' 
    AND LOWER(s.surname) = ' orson vulture' 
    AND s.id_nr = 8403125062671 
    AND LOWER(sc.race) = 'white' 
    AND sc.gender = 1 
    AND LOWER(sc.area) = 'gauteng' 
    AND p.payment_type = 1 
    AND s.student_nr = 203087506 
    AND scou.c_id = 1 AND sc.age = 23 
    AND scer.certificate_number = 3424234 
    AND sr.result = 32 
    AND l.l_id= 1 
    AND count_absent = 3 
    AND LOWER(s.branch) = 'pretoria' 
    AND LOWER(s.campus_name) = 'pretoria' 
    AND LOWER(sc.kin_name) = 'self' 
    AND t.s_id = s.s_id 
    AND t.sp_id = 1 

et je reçois l'erreur suivante

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'count_absent' in 'where clause' 

Je ne sais pas comment résoudre ce depuis la colonne est dans l'instruction select

Répondre

4

votre colonne dérivée count_absent est traitée dans la clause SELECT, qui est traitée APRES la clause WHERE, et n'est donc pas disponible. Il serait disponible si vous encapsuliez toute la requête dans un SELECT externe, pour pouvoir accéder à la colonne dérivée.

à savoir

select * from (
SELECT 
s.name, 
s.surname, 
s.id_nr, 
s.student_nr, 
s.createdate, 
s.enddate, 
(SELECT count(*) FROM Student_Attendance WHERE absent = 1) AS count_absent 
FROM 
Student AS s, 
Student_Contact AS sc, 
Student_Payment AS p, 
Student_Courses AS scou, 
Modules AS m, 
Student_Certificate AS scer, 
Student_Results AS sr, 
Lecturer_Profile AS l, 
Lecturer_Comments AS lc, 
Student_Attendance AS sa, 
Student_Training AS t 
WHERE s.s_id = sc.s_id 
AND s.s_id = p.s_id 
... 
AND t.s_id = s.s_id 
AND t.sp_id = 1 
) as x where count_absent = 3 
2

Je ne suis pas sûr de ce que vous essayez d'accomplir ici, mais notez que la requête intégrée qui donne count_absent utilise sans autre critère que « absent = 1 ». Peu importe l'étudiant que vous regardez, vous obtiendrez toujours le compte de tous les enregistrements student_attendance avec absent = 1. Je suppose que vous voulez limiter cela aux dossiers d'étudiant pour l'étudiant sélectionné.

En outre, vous pouvez étudier la clause "join". Cela rendrait vos requêtes beaucoup plus faciles à comprendre, alors le vieux style se joignant à où.

Questions connexes