T/SQL Puzzle - 如何连接以创建两个不相关的表的一对一关系?

pro*_*dad 1 t-sql sql-server join

我们假设我有两张桌子...... Foo和Bar.它们包含以下数据.

Table Foo:
Foo_Id
------
100
101

Table Bar:
Bar_Id
------
200
201
Run Code Online (Sandbox Code Playgroud)

如您所见,每个表都有两个记录.我想以这样的方式将这些表格连在一起,以便返回两个记录; 最终目标是为这些记录创建一对一的关系,即使在这种状态下他们没有这种关系.这些数据的结果将进入表Foo_Bar以存储这种新关系.

理想情况下,输出看起来类似于以下内容.

Foo_Id  Bar_Id
------  ------
100     200
101     201
Run Code Online (Sandbox Code Playgroud)

此代码将用于T/SQL存储过程.我可以使用while循环轻松地编写这个,但我不想使用while循环,因为真实世界的应用程序将拥有比四个记录更多的数据,并且将由多个用户每天多次调用.

提前致谢!

编辑:

这或多或少都是库存问题......我有100片披萨和100个人说他们想要一块披萨.Foo_Bar表基本上是一种为每人分配一片披萨的方法.该表存在,此解决方案将加载表的数据.

KM.*_*KM. 5

试试这个:

declare @Foo table (Foo_Id int)
INSERT INTO @Foo VALUES (100)
INSERT INTO @Foo VALUES (101)
declare @Bar table (Bar_Id int)
INSERT INTO @Bar VALUES (200)
INSERT INTO @Bar VALUES (201)


SELECT
    dt_f.Foo_Id
        ,dt_f.RowNumber
        ,dt_b.Bar_Id
    FROM (SELECT
              Foo_Id, ROW_NUMBER() OVER(ORDER BY Foo_Id) AS RowNumber
              FROM @Foo
          ) dt_f
        INNER JOIN (SELECT
                        Bar_Id, ROW_NUMBER() OVER(ORDER BY Bar_Id) AS RowNumber
                        FROM @Bar
                   ) dt_b ON dt_f.RowNumber=dt_b.RowNumber
Run Code Online (Sandbox Code Playgroud)