2013-04-05 35 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

相關問題