5

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

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 中)?

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

谢谢你!

4

3 回答 3

7

您可以fake使用别名丢失列 - 例如

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

其中名称在表 2 中,但不在表 1 中

除非您将 UNIONS 与 JOINS 混淆:

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

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

于 2012-05-18T23:06:54.627 回答
5

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

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';
于 2012-05-18T23:06:33.593 回答
3

在列较少的表中,尝试

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

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

于 2012-05-18T23:07:07.777 回答