For examples I don't know how many rows in each table are and I try to do like this:
SELECT * FROM members
UNION
SELECT * FROM inventory
What can I put to the second SELECT
instead of *
to remove this error without adding NULL
's?
For examples I don't know how many rows in each table are and I try to do like this:
SELECT * FROM members
UNION
SELECT * FROM inventory
What can I put to the second SELECT
instead of *
to remove this error without adding NULL
's?
Put the columns names explicitly rather than *, and make sure the number of columns and data types match for the same column in each select.
Update:
I really don't think you want to be UNIONing those tables, based on the tables names. They don't seem to contain related data. If you post your schema and describe what you are trying to achieve it is likely we can provide better help.
DESC your_table_name
to find out the columns and their data types before writing the UNION query. –
Capri SELECT *
vs. SELECT Col1, Col2
has absolutely nothing to do with SQL injection. –
Hither hey
that brought up the topic of SQL injection. My guess is that hey
thought SELECT *
could lead to SQL injection. I used to have a manager who would also worry about that so insisted that column names be always be explicit. It didn't make much sense to me, but it felt like that guy and hey
took the same classes in school... –
Dys you could do
SELECT *
from members
UNION
SELECT inventory.*, 'dummy1' AS membersCol1, 'dummy2' AS membersCol2
from inventory;
Where membersCol1
, membersCol12
, etc... are the names of columns from members
that are not in inventory
. That way both queries in the union will have the same columns (Assuming that all the columns in inventory
are the same as in members
which seems very strange to me... but hey, it's your schema).
UPDATE:
As HLGEM pointed out, this will only work if inventory
has columns with the same names as members
, and in the same order. Naming all the columns explicitly is the best idea, but since I don't know the names I can't exactly do that. If I did, it might look something like this:
SELECT id, name, member_role, member_type
from members
UNION
SELECT id, name, '(dummy for union)' AS member_role, '(dummy for union)' AS member_type
from inventory;
I don't like using NULL for dummy values because then it's not always clear which part of the union a record came from - using 'dummy' makes it clear that the record is from the part of the union that didn't have that record (though sometimes this might not matter). The very idea of unioning these two tables seems very strange to me because I very much doubt they'd have more than 1 or 2 columns with the same name, but you asked the question in such a way that I imagine in your scenario this somehow makes sense.
NULL
instead of 'dummy1' and 'dummy2'? –
Heterotrophic Are you sure you don't want a join instead? It is unlikely that UNOIN will give you what you want given the table names.
Try this
(SELECT * FROM members) ;
(SELECT * FROM inventory);
Just add semicolons after both the select statements and don't use union or anything else. This solved my error.
UNION
in it which returns one result combined from two tables whereas this returns two results. In most cases this needs to be handled differently on the client side and thus cannot be used as a direct replacement of UNION
. In addition, the parentheses around the SQL aren't needed. –
Willywilly I don't know how many rows in each table
Are you sure this isn't what you want?
SELECT 'members' AS TableName, Count(*) AS Cnt FROM members
UNION ALL
SELECT 'inventory', Count(*) FROM inventory
Each SELECT statement within the MySQL UNION ALL operator must have the same number of fields in the result sets with similar data types Visit https://www.techonthenet.com/mysql/union_all.php
I got the same error below:
ERROR 1222 (21000): The used SELECT statements have a different number of columns
Because I tried to store two values 1
and John
of id
and name
columns into only one @result
which is a user-defined session variable as shown below:
mysql> SELECT * FROM person;
+----+-------+
| id | name |
+----+-------+
| 1 | John |
| 2 | David |
+----+-------+
...
mysql> SELECT id, name INTO @result FROM person WHERE id = 1; -- Error
But, I could store two values 1
and John
of id
and name
columns into @result1
and @result2
respectively without error as shown below:
mysql> SELECT id, name INTO @result1, @result2 FROM person WHERE id = 1;
...
mysql> SELECT @result1, @result2;
+----------+----------+
| @result1 | @result2 |
+----------+----------+
| 1 | John |
+----------+----------+
© 2022 - 2024 — McMap. All rights reserved.