2017-10-14 58 views
-1

我有两个SQL临时表#TEMP1和TEMP2#,我想获得含有SET TEMP表中的两个查找记录rowno集从多列

例如ROWID的在表TEMP2有4个纪录,我想其中包含的用户ID DepartmentID的集合记录的临时表#TEMP1搜索

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记录,当我搜索2的rowid那么它包含4个记录,以便它是同一组的记录,我发现

感谢

+0

你还会要排2,如果它有另外一对,比如'(2,1, 1)'? –

+0

我已经回滚问题到它的原始状态。如果您需要进一步的帮助,请考虑提出新的问题,请不要进行此类更改,因为您已使现有答案失效。 – lad2025

回答

0

假设在行是独一无二的。然后你可以使用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

但它给了我rowid 1,我不想我只想要2 –

+0

@bhupendrasingh。 。 。我不清楚你是否想要超集。我调整了查询​​。 –

+0

@GordonLinoff你不能以'count'(*)=(从t2选择count(*))'来反驳't2'。你会得到无效的对象错误。 – lad2025

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

+0

我在temp1表中做了一些更改每个记录上如何uplate行相同,然后这个查询不工作 –