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

d-_*_*_-b 5 php mysql sql mysql-error-1222

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

SELECT username, email FROM `table1` 
UNION
 SELECT * FROM `table2` WHERE username = 'user1';
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误"#1222 - The used SELECT statements have a different number of columns".根据我的理解,UNION不起作用,

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

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

谢谢!

web*_*bod 7

您可以fake使用别名来删除缺少的列 - 例如

 SELECT username, email, '' as name FROM `table1` 
 UNION
 SELECT username, email, name FROM `table2` 
 WHERE username = 'user1';
Run Code Online (Sandbox Code Playgroud)

name在table2中,但不在table1中

除非你将UNIONS与JOINS混淆:

SELECT table1.*, table2.* FROM
table1 INNER JOIN table2
ON table1.username = table2.username
Run Code Online (Sandbox Code Playgroud)

这会合并两个表,因此您可以获得同一行中的所有列.


Mic*_*son 5

如果两个表中没有相互或类似的条目,则这些条目应该是两个不同的select语句.

SELECT username, email FROM `table1`;


SELECT * FROM `table2` WHERE username = 'user1';
Run Code Online (Sandbox Code Playgroud)

这样做的动机是什么?

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

SELECT t1.username, t1.email, t2.*
FROM table1 t1
    JOIN table2 t2 ON t1.username = t2.username
WHERE t1.username = 'user1';
Run Code Online (Sandbox Code Playgroud)