从具有不同列数的两个表中选择*

问题描述 投票:0回答:4

如何从两个不同的表中选择不同的列,例如:

SELECT username, email FROM `table1` 
UNION
 SELECT * FROM `table2` WHERE username = 'user1';

我收到错误

"#1222 - The used SELECT statements have a different number of columns"
。据我了解,UNION 不起作用,

有没有办法实现此目的,因为我需要不相等的列数和行数并且两个表中没有相互/相似的条目(即 user1 未在 table1 中列出)?

这不能在一个查询中完成吗?

谢谢你!

php mysql sql mysql-error-1222
4个回答
7
投票

您可以使用别名

fake
缺少的列 - 例如

 SELECT username, email, '' as name FROM `table1` 
 UNION
 SELECT username, email, name FROM `table2` 
 WHERE username = 'user1';

其中 name 在 table2 中,但不在 table1 中

除非您将 UNIONS 与 JOINS 混淆了:

SELECT table1.*, table2.* FROM
table1 INNER JOIN table2
ON table1.username = table2.username

这将合并两个表,因此您可以将所有列放在同一行上。


5
投票

如果两个表中没有相互或相似的条目,则它们应该是两个不同的 select 语句。

SELECT username, email FROM `table1`;


SELECT * FROM `table2` WHERE username = 'user1';

您不这样做的动机是什么?

table2
中的条目与
table1
相关吗?
join
会更合适吗?

SELECT t1.username, t1.email, t2.*
FROM table1 t1
    JOIN table2 t2 ON t1.username = t2.username
WHERE t1.username = 'user1';

3
投票

在列数较少的表中,尝试

SELECT *, 0 as col1, 0 as col2, ...

等等,以使它们具有相同的列数。


0
投票

选择 t1.用户名、t1.电子邮件、t2.* 来自表1 t1 JOIN table2 t2 ON t1.用户名 = t2.用户名 WHERE t1.username = 'user1'; 分享 编辑 关注

© www.soinside.com 2019 - 2024. All rights reserved.