查找记录rowno集从多列
我有两个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个记录,以便它是同一组的记录,我发现
感谢
的
假设在行是独一无二的。然后你可以使用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) ;
这是假定没有重复在两个表。
注意:这将返回与第二个表中的值相同或超出其值的行。
但它给了我rowid 1,我不想我只想要2 –
@bhupendrasingh。 。 。我不清楚你是否想要超集。我调整了查询。 –
@GordonLinoff你不能以'count'(*)=(从t2选择count(*))'来反驳't2'。你会得到无效的对象错误。 – lad2025
你可以使用:
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
我在temp1表中做了一些更改每个记录上如何uplate行相同,然后这个查询不工作 –
你还会要排2,如果它有另外一对,比如'(2,1, 1)'? –
我已经回滚问题到它的原始状态。如果您需要进一步的帮助,请考虑提出新的问题,请不要进行此类更改,因为您已使现有答案失效。 – lad2025