将两个不同表中的数据合并到一个表中?

cod*_*ama 2 sql join

我有以下两个表:

uid   | ABC   | ... (bunch of other stuff) ...
1     | val 1 | ... (bunch of other stuff) ...
2     | val 2 | ... (bunch of other stuff) ...
3     | val 3 | ... (bunch of other stuff) ...
Run Code Online (Sandbox Code Playgroud)

和...

uid   | DEF   | ... (bunch of other stuff) ...
4     | val 4 | ... (bunch of other stuff) ...
5     | val 5 | ... (bunch of other stuff) ...
6     | val 6 | ... (bunch of other stuff) ...
Run Code Online (Sandbox Code Playgroud)

我想最终......

uid   | text  | ... (bunch of other stuff) ...
1     | val 1 | ... (bunch of other stuff) ...
2     | val 2 | ... (bunch of other stuff) ...
3     | val 3 | ... (bunch of other stuff) ...
4     | val 4 | ... (bunch of other stuff) ...
5     | val 5 | ... (bunch of other stuff) ...
6     | val 6 | ... (bunch of other stuff) ...
Run Code Online (Sandbox Code Playgroud)

这看起来很简单,但我似乎无法弄清楚如何做到这一点.这不是一个加入?是吗?

Dav*_*res 5

UNION条款将在这里帮助您.它将两个或多个结果集合并为一个.

尝试:

SELECT uid, ABC, OtherStuff
FROM Table1

UNION

SELECT uid, DEF, OtherStuff
FROM Table2

UNION

SELECT uid, GHI, OtherStuff
FROM Table3

ORDER BY uid
Run Code Online (Sandbox Code Playgroud)

这个主题与UNION ALL运营商有所不同. UNIONUNION ALL保留重复的行,同时保留它们.

这除了行中的简单差异之外还有其他结果:删除重复项,UNION运算符需要对最终结果集进行排序.这是UNION ALL运营商没有遇到的开销.此外,显式排序操作可能导致收集的结果集UNION与排序顺序不同UNION ALL.我建议您ORDER BY在收集结果集后使用显式语句,以确保您的排序顺序符合您的意图.

另请注意,列数必须与UNION编辑的结果集匹配.从OP中不清楚这两个表在它们存储的列数方面有何不同,所以我对UNION两个SELECT *语句之间的做法犹豫不决.