提问者:小点点

基数冲突:使用的SELECT语句具有不同的列数


我得到一个错误,列不匹配,但我检查了,他们是。 以下是SQL脚本:

SELECT student_no
     , firstname
     , lastname
     , middlename
     , sub_classes.name as sub_class_name 
  FROM 
     (SELECT payments.students_student_no as student_no
           , SUM(payments.amount) as amount 
        FROM students 
        JOIN payments                
          ON payments.students_student_no = students.student_no
        JOIN sub_classes 
          ON students.sub_classes_id = sub_classes.id
       WHERE payment_type_id = ? 
         AND academic_year = ? 
         AND term = ? 
       GROUP 
          BY student_no
       UNION ALL
      SELECT student_no
           , firstname
           , lastname
           , middlename
           , sub_classes.name as sub_class_name 
        FROM students 
        JOIN sub_classes 
          ON students.sub_classes_id = sub_classes.id
       GROUP 
          BY student_no
     ) results 
 GROUP 
    BY student_no

共2个答案

匿名用户

问题在于2个select语句中的列数。 请见下文。

SELECT payments.students_student_no as student_no, SUM(payments.amount) as amount   --> number of columns should be same as the below select statement. Also the datatype of each column
FROM students
...
...
GROUP BY student_no
UNION ALL
SELECT student_no, firstname, lastname, middlename, sub_classes.name as sub_class_name   --> Number of columns here should be same as the upper select statement. Also the datatype of each column
FROM students
...
GROUP BY student_no

匿名用户

在第二个选项中,为UNION ALL选择9ng列,repect第一个选项。 在下面的代码中,已将(firstname,lastname,middlename,sub_class.name)更改为null

SELECT student_no, firstname, lastname, middlename, sub_classes.name as sub_class_name 
FROM (
    SELECT payments.students_student_no as student_no, SUM(payments.amount) as amount 
    FROM students INNER JOIN payments ON payments.students_student_no=students.student_no  
    INNER JOIN sub_classes ON(students.sub_classes_id=sub_classes.id) WHERE payment_type_id=? AND academic_year=? AND term=? GROUP BY student_no
    UNION ALL
    SELECT student_no,null 
    FROM students 
    INNER JOIN sub_classes ON students.sub_classes_id=sub_classes.id
) results