在 SQL 中粘贴 (1) [英] paste(1) in SQL

查看:65
本文介绍了在 SQL 中粘贴 (1)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在 SQL 中将不同表中的记录压缩"在一起(如 UNIX paste(1) 实用程序)?

How in SQL could you "zip" together records in separate tables (à la the UNIX paste(1) utility)?

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

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 2005Oracle 9iPostgreSQL 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆