2017-10-14 11 views
-1

複数の列からレコードROWNOのセットを見つける、と私は一時テーブル2私は2つのSQL一時テーブル#のTEMP1と#TEMP2を持って

例えばセット含むROWIDを取得したいですテーブルTEMP2で、私はそれが(2,1)のセットが含まれているため、出力は(2,2)、2のROWIDたい私は、レコード

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 

のユーザーIDのDepartmentIDセットが含まれている一時テーブル#のTEMP1で検索する4レコードを持っています、(3,3)、(4,4) rowidの1つのレコードも同じレコードセットを含んでいますそれはもう1つの行平均を持っています rowid 1に基づいてtemp1テーブルを検索すると4レコードが見つかりました。それは私が

おかげ

+0

あなたはまだそれが別のペアを持っていた場合は、2行したいでしょう、 '(2、1、 1) '? –

+0

質問を元の状態にロールバックしました。さらに質問をすることを検討する必要がある場合は、既存の回答を無効にしたため、このような変更を加えないでください。 – lad2025

答えて

0

だが内の行を想定してみましょう見つかったレコードの同じセットになるように、それは4のレコードが含まれている2のROWIDはユニークです。そして、あなたは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) ; 

これは、どちらかのテーブルには、重複を負いません。

注:これは、2番目のテーブルの値と同じか、またはそのスーパーセットの行を返します。

+1

しかし、それは私に与えられたrowid 1を与えられませんでした2私は欲しい2 –

+0

@bhupendrasingh。 。 。あなたがスーパーセットを望んでいるかどうかは私には分かりませんでした。私はクエリを調整しました。 –

+0

@ GordonLinoff 'がある(*)=(t2からの選択カウント(*))'で '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の行が同じ –

関連する問題