admin

在SQL中粘贴(1)

sql

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

例如,假设有两个表AB,如下所示:

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

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

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


阅读 206

收藏
2021-07-01

共1个答案

admin

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

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

2021-07-01