2017-10-14 57 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行相同,然後這個查詢不工作 –