Sql 如何在单个表的多列中插入多行
我想在一个查询中使用两个名为Sql 如何在单个表的多列中插入多行,sql,sql-server-2008,stored-procedures,Sql,Sql Server 2008,Stored Procedures,我想在一个查询中使用两个名为#temp1的不同临时表在多个列中插入多行,这两个临时表具有col QID和#temp2具有col RID,我试着这样做 insert into table1(ID,quetion,rating) select @ID,QID,RID from #Temp1,#temp2 ID Quest Rate 2 1 5 2 2 5 2 3 5 2 1 4 2 2 4 2 3
#temp1
的不同临时表在多个列中插入多行,这两个临时表具有col QID和#temp2
具有col RID,我试着这样做
insert into table1(ID,quetion,rating) select @ID,QID,RID from #Temp1,#temp2
ID Quest Rate
2 1 5
2 2 5
2 3 5
2 1 4
2 2 4
2 3 4
2 1 3
2 2 3
2 3 3
ID Quest Rate
2 1 5
2 2 4
2 3 3
当我插入数据时,它看起来像这样
insert into table1(ID,quetion,rating) select @ID,QID,RID from #Temp1,#temp2
ID Quest Rate
2 1 5
2 2 5
2 3 5
2 1 4
2 2 4
2 3 4
2 1 3
2 2 3
2 3 3
ID Quest Rate
2 1 5
2 2 4
2 3 3
但我想这样插入
insert into table1(ID,quetion,rating) select @ID,QID,RID from #Temp1,#temp2
ID Quest Rate
2 1 5
2 2 5
2 3 5
2 1 4
2 2 4
2 3 4
2 1 3
2 2 3
2 3 3
ID Quest Rate
2 1 5
2 2 4
2 3 3
提前感谢:您可以使用
交叉连接插入NxM行,其中N是#Temp1中的行数,M是#temp2中的行数:
如果两个临时表中的行都相关,请使用常规联接:
insert into table1(ID, quetion, rating)
select @ID, t1.QID, t2.RID
from #Temp1 t1
join #Temp2 t2
on t1.id = t2.id
这通常插入的行数少于NxM。由于表#temp1和#temp2没有公共列,您可以使用CTE和行数()获得所需的结果,如下所示:
;WITH #temp1tbl (commonid, qid)
AS (SELECT Row_number()
OVER(
ORDER BY qid) AS CommonId,
qid
FROM #temp1),
#temp2tbl (commonid, rid)
AS (SELECT Row_number()
OVER(
ORDER BY (SELECT 1)) AS CommonId,
rid
FROM #temp2)
INSERT INTO table1
(id,
quest,
rating)
SELECT @ID,
qid,
rid
FROM #temp1tbl
LEFT OUTER JOIN #temp2tbl
ON #temp1tbl.commonid = #temp2tbl.commonid
您当前正在执行交叉联接。我们需要知道临时表的结构以及它们之间的关系Askers初始查询中缺少列的两部分命名向我表明,RID
和QID
不在两个表中。@Andomar:感谢您的回答,我甚至尝试了交叉连接,得到了相同的结果注意:两个临时表都只有一列+1,这是个好主意,但是假设增加的QID与增加的RID匹配,这可能不是事实。是的..因为没有共同的列,我添加了行号()到每个临时表,并根据发布的样本数据..映射增加QID和减少RID。@deepshikha:谢谢,它正在工作,但评级存在问题。费率应按给定顺序插入,但它正在插入asc或des订单。如果不需要订购,请将order BY RID desc替换为order BY(选择1)。更新了答案。希望这有帮助!!