在 SQL 中粘贴 (1) [英] paste(1) in SQL
本文介绍了在 SQL 中粘贴 (1)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在 SQL 中将不同表中的记录压缩"在一起(如 UNIX paste(1)
实用程序)?
How in SQL could you "zip" together records in separate tables (à la the UNIX paste(1)
utility)?
例如,假设有两个表,A
和 B
,如下所示:
For example, assuming two tables, A
and B
, like so:
A B
======== ====
Harkness unu
Costello du
Sato tri
Harper
Jones
如何生成单个结果集
NAME | NUM
===============
Harkness | unu
Costello | du
Sato | tri
Harper | NULL
Jones | NULL
?
推荐答案
在 SQL Server 2005
、Oracle 9i
和 PostgreSQL 8.4
及更高版本中:
In SQL Server 2005
, Oracle 9i
and PostgreSQL 8.4
and higher:
SELECT name, num
FROM (
SELECT name, ROW_NUMBER() OVER (ORDER BY id) AS rn
FROM a
) qa
LEFT JOIN
(
SELECT num, ROW_NUMBER() OVER (ORDER BY id) AS rn
FROM b
) qb
ON qb.rn = qa.rn
ORDER BY
qa.rn
请注意,ROW_NUMBER()
要求对记录进行显式排序.
Note that ROW_NUMBER()
requires that the records are explicitly sorted.
如果没有类似于 id
的列,则不能按字母顺序以外的顺序对记录进行排序,因为关系数据库没有隐式记录顺序的概念.
If you don't have a column similar to id
, you cannot sort the records in order other than alphabetical, since relational databases have no concept of implicit record order.
这篇关于在 SQL 中粘贴 (1)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文