1

如何在 SQL 中将不同表中的记录“压缩”在一起(à la UNIXpaste(1)实用程序)?

例如,假设有两个表,A并且B,像这样:

   A          B
========    ====
Harkness    unu
Costello    du
Sato        tri
Harper
Jones

你怎么能产生一个单一的结果集

   NAME  | NUM
===============
Harkness | unu
Costello | du
Sato     | tri
Harper   | NULL
Jones    | NULL

?

4

2 回答 2

4

SQL Server 2005,Oracle 9iPostgreSQL 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()要求对记录进行显式排序。

如果没有类似于 的列id,则不能按字母顺序以外的顺序对记录进行排序,因为关系数据库没有隐式记录顺序的概念。

于 2010-04-20T15:02:08.400 回答
1

如果没有一些识别信息将行中的行关联起来,您不应该这样做。SQL 中的顺序或记录应该无关紧要,现在如果您将表更改为类似。

 ID | NAME
===============
1 | Harkness
2 | Costello
3 | Sato 
4 | Harper
5 | Jones

ID | Num
=========
 1| uno
2 | du
3 | tri

然后一个简单的

SELECT * FROM A LEFT JOIN B ON A.ID=B.ID;
于 2010-04-20T15:00:30.213 回答