【问题标题】:One record from one table to show up on all records on another table一张表的一条记录显示在另一张表的所有记录上
【发布时间】:2019-08-30 00:07:53
【问题描述】:

我有两张桌子。表 A 和 B。表 A 的数据如下:

    +---+---+---+
    | a | b | c |
    +---+---+---+
    | 2 | 1 | 8 |
    | 3 | 6 | 7 |
    | 4 | 5 | 9 |
    +---+---+---+

而表B为:

    +----+----+
    | e  | f  |
    +----+----+
    | 11 | 14 |
    +----+----+

我想创建一个 SQL 查询,该查询将为我提供一个输出,在该输出中我保留了表 A 中的所有记录,并且只保留了表 B 中的一条记录,但是表 B 中每一列中该一条记录的值会显示出来在表 A 的所有记录中。数据集的结果如下所示:

    +---+---+---+----+----+
    | a | b | c | e  | f  |
    +---+---+---+----+----+
    | 2 | 1 | 8 | 11 | 14 |
    | 3 | 6 | 7 | 11 | 14 |
    | 4 | 5 | 9 | 11 | 14 |
    +---+---+---+----+----+

我不确定 SQL 如何处理在表结果中添加这样的记录。我会假设有一种方法可以从表 B 中调出这些字段并对表 A 进行某种联合?如果还有其他问题有答案,请将此问题标记为已回答。谢谢。

【问题讨论】:

    标签: sql etl data-analysis


    【解决方案1】:

    你可以尝试使用交叉连接

    select a, b, c, d, f
    from A
    cross join B
    

    【讨论】:

      【解决方案2】:

      SQL 表根据定义是无序的,并且没有行标识符。您可以使用row_number() 创建行标识符,然后将其用于join

      select a.a, a.b, a.c, b.e, b.f
      from (select a.*, row_number() over (order by a) as seqnum
            from a
           ) a join
           (select b.*, row_number() over (order by e) as seqnum
            from b
           ) b
           on a.seqnum = b.seqnum;
      

      这假设每个表中的第一列定义了排序,就像您的示例数据一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        • 2013-04-22
        相关资源
        最近更新 更多