繁体   English   中英

连接两个表以获取所有数据

[英]Join two tables to get all data

假设我有两个表:

表格1

Col
1
3
4
5
6
9

和表2

Col
2
4
6
8

如何合并两个表,使我有1-9,并且如果一个表中只出现一个数字,则另一个表中的对应位置为空? 谢谢。

我假设您想要至少一个表中实际存在的数字,这不会给您7的行;

您正在寻找的似乎是FULL OUTER JOIN ,它可以在除MySQL外的几乎所有RDBMS中工作;

SELECT a.col col_a, b.col col_b
FROM Table1 a
FULL OUTER JOIN Table2 b ON a.col = b.col
ORDER BY COALESCE(a.col, b.col);

要使用进行测试的SQLfiddle

可悲的是,MySQL没有FULL OUTER JOIN ,因此您必须在LEFT JOINRIGHT JOIN之间使用UNION进行相同的操作;

SELECT * FROM (
  SELECT a.col col_a, b.col col_b
  FROM Table1 a
  LEFT JOIN Table2 b ON a.col = b.col
  UNION
  SELECT a.col col_a, b.col col_b
  FROM Table1 a
  RIGHT JOIN Table2 b ON a.col = b.col
)z
ORDER BY COALESCE(col_a, col_b);

另一个SQLfiddle

如果我没看错。 您需要两个表中的记录。 (如果我错了,请纠正我)

尝试执行以下操作以从两个表中获取数据:

select col from Table1
union
select col from Table2

select col from Table1
union all
select col from Table2

注意: UNION会删除重复的记录(结果中的所有列都相同),而UNION ALL不会。

使用UNION vs UNION ALL ,性能会受到影响,因为数据库服务器必须做其他工作才能删除重复的行,但是通常您不希望重复(特别是在开发报表时)。

您可以使用union尝试使用此方法:

SELECT * FROM (SELECT col AS value FROM table1
UNION 
SELECT col AS value FROM table2)t1
ORDER BY value

尝试发表您的评论:

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM