一个表中的一个记录可显示在另一表中的所有记录上

时间:2019-04-08 19:11:34

标签: sql etl data-analysis

我有两个桌子。表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进行某种形式的联合?如果还有另一个问题的答案,请将该问题标记为已回答。谢谢。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用交叉联接

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

答案 1 :(得分:1)

根据定义,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;

这假定每个表格的第一列都定义了顺序,如示例数据中所示。