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

Asked

Viewed 7,998 times

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 while running:

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

Where the column is missing ?

  • Where should contain ?

  • is now in port

  • Probably the problem is here: You are using the same to compare several values. If you want to know if it is one of a list of several, use the IN: work_students.student_qrcode IN( '2o...

  • I edited your question so SQL fit on the screen, it is easier for people to read and identify other problems. Looking at it this way, it seems to me that the problem really is the = in the place where the IN should be. By the way, if it’s all AND, it doesn’t even need the ( ).

  • Really was the = , thanks

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 case, to know if a value is in a list of values, the appropriate operator is the IN:

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

Taking advantage, follows his query already with the mentioned correction, and a slight optimization in the AND (how is everything AND, the 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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.