Question

J'ai la requête suivante

    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 j'obtiens 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 problème car la colonne est dans l'instruction select

Était-ce utile?

La solution

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

c'est-à-dire

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

Autres conseils

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 n'utilise aucun autre critère que "absent" = 1 ". Ainsi, peu importe l'étudiant que vous consultez, vous obtiendrez toujours le nombre total d'enregistrements d'assistante d'élèves avec absent = 1. Je pense que vous voulez limiter cela aux enregistrements d'assistante d'élèves pour l'élève sélectionné.

Vous pouvez également rechercher le " rejoindre " clause. Cela rendrait vos requêtes beaucoup plus faciles à comprendre, puis l'ancien style se joint à où.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top