2016-10-01 9 views
0

2つのテーブルtblEmp1とtblEmp2から、tblEmp2を比較してtblEmp1の一致しない行を抽出する必要があります。2つのテーブルから一致しない行を返すSQLクエリ

はあなたのすべては、DEPTID = 3については、上記MngrID = 994、995、999及びTempID = 165、559を見ることができるようにtblEmp2

EmpID DeptName DeptID MngrID TEMPID  Salary1   Salary2   DOJ       
84  XYZ   3  994  165   1500000000  1500000000  2016-12-31 
85  XYZ   3  995  559   1000000000  1000000000  2016-12-31  
86  XYZ   3  999  556   2500000000  2500000000  2016-12-31 

から選択* tblEmp1

EmpMasterID  DeptID MngrID  TEMPID  Salary1   Salary2   DOJ   
46    3  995   559   1000000000  1000000000  2016-12-31  
47    3  999   556   2500000000  2500000000  2016-12-31  
48    3  994   165   1500000000  1500000000  2016-12-31   
49    3  998   566   7500000000  7500000000  2016-12-31   
50    3  1049  562   9500000000  9500000000  2016-12-31 

から選択します* 、556私はsalary1とsalary2をDOJ = '2016-12-31'と一致させています。

私の要件は、DFeptID = 3とDOJは=「2016年12月31日」 はつまり、私のクエリはtblEmp1から終わる2行を返す必要があるため、私はtblEmp2テーブルに存在しない最初のテーブルからレコードだけを抽出すべきですテーブル

EmpMasterID  DeptID MngrID  TEMPID  Salary1   Salary2   DOJ      
49    3  998   566   7500000000  7500000000  2016-12-31   
50    3  1049  562   9500000000  9500000000  2016-12-31 

彼らはDEPTID = 3 tblEmp2テーブルに存在していないとDOJ =ので、 '2016年12月31日'

これは私が今

select t1.EmpMasterID, t1.DeptID, t1.MngrID, t1.TEMPID, t1.Salary1, t1.Salary2, t1.DOJ 
from tblEmp1 as t1 
left outer join tblEmp2 as t2 
on t1.DeptID = t2.DeptID, t1.MngrID = t2.MngrID, t1.TEMPID = t2.TEMPID, t1.DOJ = t2.DOJ 
where t1.DeptID = 3 and t1.DOJ = '2016-12-31' and t2.MngrID is null and t2.TEMPID is null 
までTRIDてきたものです3210

重要:tblEmp2テーブルはDeptNameに基づいてフィルタリングする必要があることを忘れています。つまり、tblEmp1.DeptID = 3、tblEmp2.DeptName = 'XYZ'、tblEmp1.DOJ = '2016-12-31'検索/フィルタ条件とする。

+0

比較の対象となるのはどの列ですか? MngrId、TempIDまたは何ですか? –

+0

どちらか一方が異なる場合 – Amar

答えて

0

以下のスクリプトを試してみてください。 AND演算子を使用して、オン状態の '、'を変更します。

SELECT t1.EmpMasterID, t1.DeptID, t1.MngrID, t1.TEMPID, t1.Salary1, t1.Salary2, t1.DOJ 
    FROM tblEmp1 as t1 
     left outer join tblEmp2 as t2 
      on t1.DeptID = t2.DeptID and t1.MngrID = t2.MngrID and t1.TEMPID = t2.TEMPID and t1.DOJ = t2.DOJ 
      AND t2.DeptName = 'XYZ' -- AND t1.Salary1=t2.Salary1 AND t1.Salary2=t2.Salary2 --(include these columns if you wanted to compare salary) 
    WHERE t1.DeptID = 3 and t1.DOJ = '2016-12-31' 
     and t2.DeptId is null 

OR をNOTを使用をEXISTS ..

SELECT t1.EmpMasterID, t1.DeptID, t1.MngrID, t1.TEMPID, t1.Salary1, t1.Salary2, t1.DOJ 
    FROM tblEmp1 as t1 
     WHERE NOT EXISTS(SELECT 1 
         FROM tblEmp2 as t2 
         WHERE t1.DeptID = t2.DeptID and t1.MngrID = t2.MngrID and t1.TEMPID = t2.TEMPID and t1.DOJ = t2.DOJ 
          -- AND t1.Salary1=t2.Salary1 AND t1.Salary2=t2.Salary2 --(include these columns if you wanted to compare salary) 
           ) 
     AND t1.DeptID = 3 and t1.DOJ = '2016-12-31' 
+0

... – Amar

+0

期待される出力と上記のクエリの結果の違いは何ですか? –

+0

左結合のon節に 'tblEmp2.DeptName =' XYZ 'という条件を含める必要があります。これをwhere条件に含めると、内部結合として動作します。 –

0
select * 
from tblEmp1 t1 
join (

    select DeptID, MngrID, TempID 
    from tblEmp1 
except 
    select DeptID, MngrID, TempID 
    from tblEmp2 
) t2 on t1.DeptId = t2.DeptId and t1. MngrId = t2.MngrId and t1.TempID = t2.TempID 
+0

Not Working .... – Amar

0

私はこれを実行します。

;WITH tblEmp1 AS (
SELECT * 
FROM (VALUES 
(46,    3,  995,   559,   1000000000,  1000000000,  '2016-12-31'), 
(47,    3,  999,   556,   2500000000,  2500000000,  '2016-12-31'), 
(48,    3,  994,   165,   1500000000,  1500000000,  '2016-12-31'),  
(49,    3,  998,   566,   7500000000,  7500000000,  '2016-12-31'), 
(50,    3,  1049,  562,   9500000000,  9500000000,  '2016-12-31') 
) as t(EmpMasterID,DeptID,MngrID,TEMPID,Salary1,Salary2,DOJ) 
), tblEmp2 AS (
SELECT * 
FROM (VALUES 
(84,  'XYZ',   3,  994,  165,   1500000000,  1500000000,  '2016-12-31'), 
(85,  'XYZ',   3,  995,  559,   1000000000,  1000000000,  '2016-12-31'), 
(86,  'XYZ',   3,  999,  556,   2500000000,  2500000000,  '2016-12-31') 
) as t(EmpID,DeptName,DeptID,MngrID,TEMPID,Salary1,Salary2,DOJ) 
) 

SELECT e1.* 
FROM tblEmp1 e1 
LEFT JOIN tblEmp2 e2 
    ON e1.DeptID = e2.DeptID 
     AND e1.MngrID = e2.MngrID 
     AND e1.TEMPID = e2.TEMPID 
     AND e1.DOJ = e2.DOJ 
where e1.DeptID = 3 and e1.DOJ = '2016-12-31' 
    AND e2.MngrID IS NULL AND e2.TEMPID IS NULL 

をそして、この取得:

EmpMasterID DeptID MngrID TEMPID Salary1  Salary2  DOJ 
49   3  998  566  7500000000 7500000000 2016-12-31 
50   3  1049 562  9500000000 9500000000 2016-12-31 

あなたが必要とする行は、あなたが投稿するのとほとんど同じです。何が問題だと思いますか?

関連する問題