您如何在SQL中将不同表中的记录“压缩”在一起(在UNIXpaste(1)实用程序中)?
paste(1)
例如,假设有两个表A和B,如下所示:
A
B
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和更高版本:
SQL Server 2005
Oracle 9i
PostgreSQL 8.4
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()要求对记录进行显式排序。
ROW_NUMBER()
如果没有类似于的列id,则不能按字母顺序对记录进行排序,因为关系数据库没有隐式记录顺序的概念。
id