我将如何从两个不同的表中选择不同的列,例如:
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 未在表1中列出(?
这不能在一个查询中完成吗?
谢谢!
您可以使用别名fake
缺少的列 - 例如
SELECT username, email, '' as name FROM `table1`
UNION
SELECT username, email, name FROM `table2`
WHERE username = 'user1';
其中名称在表 2 中,但不在表 1 中
除非您将 UNIONS 与 JOIN 混淆:
SELECT table1.*, table2.* FROM
table1 INNER JOIN table2
ON table1.username = table2.username
这将合并两个表,因此您可以在同一行上获得所有列。
如果两个表中没有相互或相似的条目,则这些条目应该是两个不同的选择语句。
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';
在列较少的表中,尝试
SELECT *, 0 as col1, 0 as col2, ...
等,以使它们具有相同数量的列。