The error Operand should contain 1 column(s)
is most likely caused by a subquery that’s returning more than one column.
Here’s a typical SELECT
query that causes this error:
SELECT column_one,
(SELECT column_two, column_three FROM table_two)
FROM table_one;
The above subquery returns column_two
and column_three
, so MySQL throws the Operand should contain 1 column(s)
error.
Most often, you only need to check your subquery and make sure that it returns only one column.
If you need more guidance on how to fix this MySQL error, then you may read the next section.
How to fix Operand should contain 1 column(s) error
To illustrate an example, imagine you have two tables that have related data named members
and pets
.
The members
table contain the first_name
of people who have pets as shown below:
+----+------------+----------------+
| id | first_name | country |
+----+------------+----------------+
| 1 | Jessie | United States |
| 2 | Ann | Canada |
| 3 | Joe | Japan |
| 4 | Mark | United Kingdom |
| 5 | Peter | Canada |
+----+------------+----------------+
While the pets
table contain the owner
and the species
column as follows:
+----+--------+---------+------+
| id | owner | species | age |
+----+--------+---------+------+
| 1 | Jessie | bird | 2 |
| 2 | Ann | duck | 3 |
| 3 | Joe | horse | 4 |
| 4 | Mark | dog | 4 |
| 5 | Peter | dog | 5 |
+----+--------+---------+------+
The first_name
and the owner
columns are related, so you may use a subquery to display data from both tables like this:
SELECT `first_name` AS `owner_name`,
(SELECT `species`, `age`
FROM pets WHERE pets.owner = members.first_name)
FROM members;
However, the above SQL query is wrong, and it will throw an error like this:
ERROR 1241 (21000): Operand should contain 1 column(s)
This is because MySQL expects the subquery to return only one column, but the above subquery returns two.
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.owner = members.first_name) AS `age`
FROM members;
While the above query works, it will throw another error once the subquery returns more than one row.
Let’s add another pet that’s owned by “Jessie” to the pets
table as shown below:
+----+--------+---------+------+
| id | owner | species | age |
+----+--------+---------+------+
| 1 | Jessie | bird | 2 |
| 2 | Ann | duck | 3 |
| 3 | Joe | horse | 4 |
| 4 | Mark | dog | 4 |
| 5 | Peter | dog | 5 |
| 6 | Jessie | cat | 4 |
+----+--------+---------+------+
Now the subqueries will return two species
and age
rows for “Jessie”, causing another related error:
mysql> SELECT `first_name` AS `owner_name`,
-> (SELECT `species`
-> FROM pets WHERE pets.owner = members.first_name)
-> FROM members;
ERROR 1242 (21000): Subquery returns more than 1 row
To properly fix the error, you need to replace the subquery with a JOIN
clause:
SELECT `first_name` AS `owner_name`, `species`, `age`
FROM members JOIN pets
ON members.first_name = pets.owner;
Subqueries can be used to replace JOIN
clauses only when you need to SELECT
data from one table, but you need to filter the result by another table column.
For example, maybe you have some owner names in the pets
table that aren’t recorded in the members
table. You can use a subquery in the WHERE
clause to display rows in the pets
table that are also recorded in the members
table.
Here’s an example of using a subquery in the WHERE
clause:
SELECT `owner`, `species`, `age`
FROM pets
WHERE `owner` IN (SELECT `first_name` FROM members);
Without using a subquery, you need to JOIN the table as shown below:
SELECT `owner`, `species`, `age`
FROM pets JOIN members
ON pets.owner = members.first_name;
The two queries above will produce the same result set.
And that’s how you can fix the Operand should contain 1 column(s)
error in MySQL.
You need to check your subquery before anything else when you encounter this error.
Содержание
- How to fix MySQL operand should contain 1 column(s) error
- How to fix Operand should contain 1 column(s) error
- Level up your programming skills
- About
- #1241 Operand should contain 1 column(s) in Insert into Select
- 3 Answers 3
- Related
- Hot Network Questions
- Subscribe to RSS
- MySQL error 1241: Operand should contain 1 column(s)
- 3 Answers 3
- Linked
- Related
- Hot Network Questions
- Subscribe to RSS
How to fix MySQL operand should contain 1 column(s) error
Posted on Oct 06, 2021
Learn how to fix MySQL error operand should contain 1 column(s)
The error Operand should contain 1 column(s) is most likely caused by a subquery that’s returning more than one column.
Here’s a typical SELECT query that causes this error:
The above subquery returns column_two and column_three , so MySQL throws the Operand should contain 1 column(s) error.
Most often, you only need to check your subquery and make sure that it returns only one column.
If you need more guidance on how to fix this MySQL error, then you may read the next section.
How to fix Operand should contain 1 column(s) error
To illustrate an example, imagine you have two tables that have related data named members and pets .
The members table contain the first_name of people who have pets as shown below:
While the pets table contain the owner and the species column as follows:
The first_name and the owner columns are related, so you may use a subquery to display data from both tables like this:
However, the above SQL query is wrong, and it will throw an error like this:
This is because MySQL expects the subquery to return only one column, but the above subquery returns two.
To fix the error, you may create two subqueries with each subquery returning only one column as in the following SELECT statement:
While the above query works, it will throw another error once the subquery returns more than one row.
Let’s add another pet that’s owned by “Jessie” to the pets table as shown below:
Now the subqueries will return two species and age rows for “Jessie”, causing another related error:
To properly fix the error, you need to replace the subquery with a JOIN clause:
Subqueries can be used to replace JOIN clauses only when you need to SELECT data from one table, but you need to filter the result by another table column.
For example, maybe you have some owner names in the pets table that aren’t recorded in the members table. You can use a subquery in the WHERE clause to display rows in the pets table that are also recorded in the members table.
Here’s an example of using a subquery in the WHERE clause:
Without using a subquery, you need to JOIN the table as shown below:
The two queries above will produce the same result set.
And that’s how you can fix the Operand should contain 1 column(s) error in MySQL.
You need to check your subquery before anything else when you encounter this error.
Level up your programming skills
I’m sending out an occasional email with the latest programming tutorials. Drop your email in the box below and I’ll send new stuff straight into your inbox!
About
Nathan Sebhastian is a software engineer with a passion for writing tech tutorials.
Learn JavaScript and other web development technology concepts through easy-to-understand explanations written in plain English.
Источник
#1241 Operand should contain 1 column(s) in Insert into Select
hey Guys i m working on SQL and i got this error
first i ll show you my code
i got the error #1241 — Operand should contain 1 column(s); and if i use
it work perfectly so where’s the problem i want to insert many columns not only one
3 Answers 3
I think you are getting this error as the rows returned by the SELECT is more than one. So you can use a INSERT INTO TABLE SELECT like this:
You should use insert . . . select , and you can use it with a constant:
- If you want only one row, then add limit 1 .
- Even when using values, you need single quotes around the date. 2015-03-28 evaluates to 1984 (think «subtraction»). This then gets treated as a date.
The Error You are Getting because Your Sub-Query SELECT CodeEquipement,nomenclature FROM equipement WHERE Numero_Serie =241 Returning More than 1 result.
if you want to insert a single row to the table then you can try:
And if you want to insert all the record from equipement table to HistoriqueEquipement table.
Hot Network Questions
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.1.14.43159
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Источник
MySQL error 1241: Operand should contain 1 column(s)
I am trying to Insert data from a table1 into table2
Key for table2 is student_id.
Assume that there are not any duplicates.
I get the error: MySQL error 1241: Operand should contain 1 column(s)
There are only four columns in table2.
3 Answers 3
Syntax error, remove the ( ) from select .
Just remove the ( and the ) on your SELECT statement:
Another way to make the parser raise the same exception is the following incorrect clause.
The nested SELECT statement in the IN clause returns two columns, which the parser sees as operands, which is technically correct, since the id column matches values from but one column (role_id) in the result returned by the nested select statement, which is expected to return a list.
For sake of completeness, the correct syntax is as follows.
The stored procedure of which this query is a portion not only parsed, but returned the expected result.
Linked
Hot Network Questions
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.1.14.43159
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Источник
@fezarmon
Начинающий программист
вот сам запрос
SELECT * FROM `board` WHERE moder=0 AND activ=0 AND id_akk IN (SELECT user_id_to, user_id_from FROM `podpiski` WHERE user_id_from='38')
Я понимаю, что в операторе IN, а точней в SELECT нельзя выбрать два столбца. Могли бы вы написать альтернативный такой же запрос или исправить этот.
-
Вопрос заданболее года назад
-
957 просмотров
Комментировать
Решения вопроса 1
@fezarmon Автор вопроса
Начинающий программист
SELECT *
FROM `board`
WHERE moder=0 AND activ=0 AND id_akk IN (SELECT user_id_to
FROM `podpiski`
WHERE user_id_from='38'
union
SELECT user_id_from
FROM `podpiski`
WHERE user_id_from='38')
Комментировать
Пригласить эксперта
Похожие вопросы
-
Показать ещё
Загружается…
10 февр. 2023, в 00:54
2000 руб./в час
10 февр. 2023, в 00:15
1000 руб./в час
09 февр. 2023, в 22:06
500 руб./за проект