代码之家  ›  专栏  ›  技术社区  ›  pilcrow

SQL中的粘贴(1)

  •  1
  • pilcrow  · 技术社区  · 14 年前

    在SQL中,如何将记录“压缩”在单独的表中(Unix中的la paste(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
    

    ?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Quassnoi    14 年前

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

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

        2
  •  1
  •   MindStalker    14 年前

    如果没有一些标识信息来将一个行与另一个行相关联,则不应该这样做。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;