从多列

时间:2017-10-14 15:12:45

标签: sql sql-server

我有两个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个记录,这样它就是我找到的同一组记录

由于

2 个答案:

答案 0 :(得分:0)

我们假设table1中的行是唯一的。然后,您可以使用joingroup 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