插入多行整数的最有效方法

时间:2013-04-05 21:34:34

标签: tsql

我有2个简单的选择查询来获取id的列表。我的第一个表返回让我们说5个ID。     1,2,5,10,23

我的第二个表返回一个不按任何顺序排列的50个ID列表。

什么是最有效的方法来编写查询以将我的第一个表中的每个ID映射到第二个表中的所有ID?

编辑:抱歉这里有更多信息。

如果表1的结果为ids = 1,2,5,10,23 表2列出了ids = 123,234,345,456,567

我想写一个插入表,将这些值插入表3中

 Table1ID | Table2ID
         1|123 
         1|234
         1|345
         1|456
         1|567
         2|123 
         2|234
         2|345
         2|456
         2|567

等等。

2 个答案:

答案 0 :(得分:0)

INSERT INTO ... SELECT语句与交叉连接一起使用:

INSERT INTO TableC (ID1, ID2)
SELECT A.ID AS ID1, b.ID AS ID2 FROM TableA A CROSS JOIN TableB B;

<强> Sample DEMO

MSDN上描述了

INSERT INTO…SELECTINSERT (Transact-SQL)

  

您可以使用INSERT INTO <target_table> SELECT <columns> FROM <source_table>从一个有效地传输大量行   表(例如登台表)到另一个具有最少日志记录的表。   最小的日志记录可以提高语句的性能   减少操作填充可用的可能性   交易期间的交易日志空间。

答案 1 :(得分:0)

您正在寻找的是笛卡尔积。

您可以通过将两个表连接在一起而不加入条件来完成此操作,这可以通过CROSS JOIN完成。

INSERT dbo.TableC (AID, BID)
SELECT A.ID, B.ID
FROM
   dbo.TableA A
   CROSS JOIN dbo.TableB B
;

这是一张可视化笛卡尔积的图像。输入很小,左边的符号列对应第一个表,右边的列是第二个表。在没有条件的情况下执行JOIN时,您会在中间的每条连接线上获得一行。

Cartesian Product