我想在单个查询中使用两个不同的临时表在多个列中插入多行,这两个临时表名为#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
提前感谢:
答案 0 :(得分:1)
由于表#temp1和#temp2没有公共列,您可以使用CTE和row_number()来获取所需的结果:
;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
答案 1 :(得分:0)
您可以使用cross join
插入NxM行,其中N是#Temp1中的行数,M是#temp2中的行数:
insert into table1(ID, quetion, rating)
select @ID, t1.QID, t2.RID
from #Temp1 t1
cross join #Temp2 t2
如果两个临时表中的行都相关,请使用常规连接:
insert into table1(ID, quetion, rating)
select @ID, t1.QID, t2.RID
from #Temp1 t1
join #Temp2 t2
on t1.id = t2.id
这通常会插入少于NxM的行。