我有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
等等。
答案 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…SELECT
:INSERT (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
时,您会在中间的每条连接线上获得一行。