我有两个sql临时表#Temp1和#Temp2,我想得到包含一组临时表二的rowid
E.g。在表Temp2中有4条记录我想在临时表#Temp1中搜索其中包含userid departmentid记录集
CREATE TABLE #Temp1(rowid INT, userid INT, departmentid int)
CREATE TABLE #Temp2(userid INT, deparetmentid int)
INSERT INTO #Temp1 (rowid,userid,departmentid )
VALUES (1,1,1),(1,2,2),(1,3,3),(1,4,4),(1,2,1),
(2,2,1),(2,2,2),(2,3,3),(2,4,4),
(3,3,1),(3,2,2),(3,3,3),(3,4,4)
INSERT INTO #Temp2 (userid,departmentid )
VALUES (2,1),(2,2),(3,3),(4,4)
DROP TABLE #Temp1
DROP TABLE #Temp2
我想要输出rowid 2,因为它包含(2,1),(2,2),(3,3),(4,4)的集合 rowid中的一件事也包含相同的记录集,它还有一行的意思 当我在temp1表中搜索基于rowid 1然后我找到了4个记录,当我搜索rowid 2然后它包含4个记录,这样它就是我找到的同一组记录
由于
答案 0 :(得分:0)
我们假设table1
中的行是唯一的。然后,您可以使用join
和group by
:
select t1.rowid
from #table1 t1 left join
#table2 t2
on t1.userid = t2.userid and t1.departmentid = t2.departmentid
group by t1.rowid
having count(*) = (select count(*) from #table2 t2) and
count(*) = count(t2.userid) ;
这假设两个表中都没有重复。
注意:这将返回与第二个表中的值相同或超集的行。
答案 1 :(得分:0)
您可以使用:
SELECT rowid
FROM #Temp1 t1
WHERE NOT EXISTS(SELECT userid, departmentid
FROM #Temp1 tx
WHERE tx.rowid=t1.rowid
EXCEPT
SELECT userid, departmentid
FROM #Temp2)
GROUP BY rowid
HAVING COUNT(*) = (SELECT COUNT(*) FROM #Temp2);
输出:
2
<强> Rextester Demo 强>