Frage

Ich habe die folgende Abfrage

    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 

und ich bekomme die folgende Fehlermeldung

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

Sie wissen nicht, wie diese zu lösen, da die Spalte in der select-Anweisung ist

War es hilfreich?

Lösung

Ihre abgeleitete Spalte count_absent wird in der SELECT-Klausel verarbeitet, die nach der WHERE-Klausel verarbeitet wird, und so ist es nicht verfügbar. Es wäre möglich, wenn Sie die gesamte Abfrage in einer äußeren SELECT gewickelt, in der Lage sein, die abgeleitete Spalte zugreifen zu können.

d.

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

Andere Tipps

Ich bin nicht sicher, was Sie versuchen hier zu erreichen, aber beachten Sie, dass die Abfrage eingebettet, die count_absent verwendet keine anderen Kriterien als „abwesend = 1“ gibt. So ist es nicht, die Schüler keine Rolle bei dem Sie suchen, werden Sie immer mit den abwesenden = 1 eine Zählung aller student_attendance Datensätze erhalten. Ich vermute, Sie wollen, dass diese begrenzen Datensätze für die ausgewählten Schüler student_attendance.

Auch Sie könnten die „Join“ Klausel untersuchen. Dies würde Ihre Fragen viel einfache Sinn dann der alte Stil Beitritt zu machen mit dem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top