2013-04-05 41 views
-1

我有2个简单的select查询来给我一个id列表。我的第一个表格返回让我们说5个ID。 1,2,5,10,23插入多行整数的最有效方法

我的第二张表返回一个不是以任何顺序的50个ID的列表。

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

编辑:对不起,这是更多信息。

如果表1具有的ID = 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

我thnk我们需要更多的信息,我不知道是什么导致你希望得到的。 – HLGEM 2013-04-05 21:36:56

回答

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

INSERT INTO…SELECT在MSDN描述:INSERT (Transact-SQL)

您可以使用INSERT INTO <target_table> SELECT <columns> FROM <source_table>高效地转移大量的行来自一个 表等一个临时表,以最少的日志记录到另一个表。 最小日志记录可以提高语句的性能,并且可以减少在事务处理期间填充可用事务日志空间的操作的可能性。

+0

你能否至少在你的连接中使用ANSI语法? – ErikE 2013-04-05 21:53:46

+0

@ErikE为什么我应该这样做,当我的代码在SQL Server上工作的很好? – MarcinJuraszek 2013-04-05 21:55:22

+1

因为“工作得很好”对于选择工作实践来说是一个很差的启发式,所以当[主持人](http://weblogs.sqlteam.com/jamesw/archive/2011/10/03/a-list-of-sql- [sql专业人员](http://connect.microsoft.com/SQLServer/feedback/details/496012)称它为[坏习惯](http://sqlblog.com/blogs/aaron_bertrand/best-practices.aspx) archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx)和[推荐使用它](http://www.sqlservercentral.com/blogs/brian_kelley/2009/09/30 /的-旧内加入语法-VS最新内加入语法/)。 – ErikE 2013-04-05 22:26:33

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

相关问题