Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL Syntax error message "Operand should contain 1 column(s)"

Tags:

I tried running the following statement:

INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION) SELECT (a.number, b.ID, b.DENOMINATION)  FROM temp_cheques a, BOOK b WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1; 

which, as I understand it, should insert into VOUCHER each record from temp_cheques with the ID and DENOMINATION fields corresponding to entries in the BOOK table (temp_cheques comes from a database backup, which I'm trying to recreate in a different format). However, when I run it, I get an error:

Error: Operand should contain 1 column(s) SQLState:  21000 ErrorCode: 1241 

I'm running this in SQuirrel and have not had issues with any other queries. Is there something wrong with the syntax of my query?

EDIT:

The structure of BOOK is:

ID  int(11) START_NUMBER    int(11) UNITS   int(11) DENOMINATION    double(5,2) 

The structure of temp_cheques is:

ID  int(11) number  varchar(20) 
like image 800
Elie Avatar asked Jan 19 '09 05:01

Elie


People also ask

How to solve Operand should contain 1 column s in MySQL?

To fix the error, you may create two subqueries with each subquery returning only one column as in the following SELECT statement: SELECT `first_name` AS `owner_name`, (SELECT `species` FROM pets WHERE pets. owner = members. first_name) AS `species`, (SELECT `age` FROM pets WHERE pets.

How do you solve this operand should contain 1 column s?

If you are sure that the leading cause of this error is that your subquery is selecting two columns, the best solution for you could be to use the “users” table instead of the subquery. The “users” table will allow you to select what columns you want from users with flexibility.


2 Answers

Try removing the parenthesis from the SELECT clause. From Microsoft TechNet, the correct syntax for an INSERT statement using a SELECT clause is the following.

INSERT INTO MyTable  (PriKey, Description)        SELECT ForeignKey, Description        FROM SomeView 

The error you're getting, "The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay.", is actually correct, assuming you have many rows in both BOOK and temp_cheques. You are trying to query all rows from both tables and make a cross-reference, resulting in an m*n size query. SQL Server is trying to warn you of this, before performing a potentially long operation.

Set SQL_BIG_SELECTS = 1 before running this statement, and try again. It should work, but note that this operation may take a long time.

like image 60
lc. Avatar answered Sep 17 '22 19:09

lc.


Does B contain the UNITS column?

What is the table structure for temp_cheques and Book?

EDIT: As I said in comments, all the columns should be numeric when doing +/- and when comparing.
Does the following simple SELECT work?

SELECT b.START_NUMBER+b.UNITS-1 FROM Books B

like image 29
shahkalpesh Avatar answered Sep 17 '22 19:09

shahkalpesh