ERROR 1241 (21000): Operand should contain 1 column (s)

1

I have this select

SELECT
   'works'.'grade_id' FROM 'works'
   INNER JOIN 'work_images' ON 'work_images'.'work_id' = 'works'.'id'
   INNER JOIN 'work_students' ON 'work_students'.'work_id' = 'works'.'id'
   RIGHT OUTER JOIN qrcodes on qrcodes.code = works.teacher_qrcode
WHERE
  (
     works.school_id IS NOT NULL
     AND works.material_id > 0
     AND works.teacher_qrcode IS NOT NULL
     AND work_students.student_qrcode IS NOT NULL
  )
  AND (work_students.student_qrcode =
     ('2odclt6c','s4001d5j8','s4000p3sd','0413g8vsj',
     'i40008tia','2odco0dv','2odd12pn','0413gsqma','2odfkal3','0413a4i8u','2odg00n4',
     '04137plis','2odehfpg','2odg9qhn','2oddpe4k','s40020n0c','i400112td','04136t1ti',
     '0413agib3','0413a12o7'))
LIMIT 6
OFFSET 0

And I get this error when I run:

  

ERROR 1241 (21000): Operand should contain 1 column (s)

Where is the column missing?

    
asked by anonymous 04.05.2016 / 00:23

1 answer

2

Basically the problem is that in this part, you are comparing a value with a group, and the equality operator only accepts one field or value on each side:

work_students.student_qrcode = ('2odclt6c','s4001d5j8','s4000p3sd','0413g8vsj'...

In this case, to know if a value is in a list of values, the appropriate operator is IN :

work_students.student_qrcode IN('2odclt6c','s4001d5j8','s4000p3sd','0413g8vsj'...

Taking advantage of your query already with the mentioned correction, and a slight optimization in AND (as is AND , grouping is unnecessary):

SELECT
   'works'.'grade_id' FROM 'works'
   INNER JOIN 'work_images' ON 'work_images'.'work_id' = 'works'.'id'
   INNER JOIN 'work_students' ON 'work_students'.'work_id' = 'works'.'id'
   RIGHT OUTER JOIN qrcodes on qrcodes.code = works.teacher_qrcode
WHERE
   works.school_id IS NOT NULL
   AND works.material_id > 0
   AND works.teacher_qrcode IS NOT NULL
   AND work_students.student_qrcode IS NOT NULL
   AND work_students.student_qrcode IN(
      '2odclt6c', 's4001d5j8', 's4000p3sd', '0413g8vsj', 'i40008tia', '2odco0dv',
      '2odd12pn', '0413gsqma', '2odfkal3', '0413a4i8u', '2odg00n4', '04137plis',
      '2odehfpg', '2odg9qhn', '2oddpe4k', 's40020n0c', 'i400112td', '04136t1ti',
      '0413agib3','0413a12o7'
   )
LIMIT  6
OFFSET 0
    
04.05.2016 / 23:28