加入两个表来获取所有数据

时间:2014-05-08 04:12:29

标签: sql join

假设我有两个表:

表1

Col
1
3
4
5
6
9

和表2

Col
2
4
6
8

如何合并这两个表,所以我有1-9,如果一个数字只出现在一个表中,另一个表中的相应位置是否为null?谢谢。

3 个答案:

答案 0 :(得分:1)

我假设你想要至少有一个表中实际存在的数字,这些数字不会给你一行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);

An SQLfiddle to test with

可悲的是,MySQL没有FULL OUTER JOIN,所以你必须在UNIONLEFT JOIN之间使用RIGHT JOIN执行相同的操作;

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);

Another SQLfiddle

答案 1 :(得分:0)

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

尝试按以从两个表中获取数据:

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时性能受到影响,因为数据库服务器必须执行其他工作才能删除重复的行,但通常您不需要重复项(特别是在开发报表时)。

答案 2 :(得分:0)

你可以使用union尝试这个:

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

尝试发表您的评论:

由于