2011-12-17 57 views
0

我下面的SQL查询SQL NOT EXISTS查询

declare @temp table(RevisionStatus varchar(100),DocTypeID varchar(50)) 
insert into @temp(RevisionStatus,DocTypeID) 
select distinct md.RevisionStatus,dt.DocumentTypeID 
from MissingDesignData md inner join tblDocumentType dt on md.[Doc Type]=dt.DocumentType inner join tblRevisionStatus rv on md.RevisionStatus=md.RevisionStatus 

select distinct tm.RevisionStatus,tm.DocTypeID as 'DocType' 
from @temp tm 
rv.RevisionStatus=tm.RevisionStatus and rv.DocType=tm.DocTypeID 
where not exists (select distinct rss.RevisionStatus,rss.DocType from tblRevisionStatus rss) 

我需要返回的记录,其中在tblRevisionStatus表不存在,但在@temp存在table.currently其返回空数据集

当我选择@temp数据是如下

RevisionStatus DocType 
PEN - Pending 14 
PEN - Pending 16 
PEN - Pending 2 
PEN - Pending 3 
PEN - Pending 30 
PEN - Pending 34 
PEN - Pending 5 
PEN - Pending 55 

tblRevisionStatus数据集回报

RevisionStatus    DocType 

IFC - Issued For Construction  4 
RFD - Revised As Denoted    4 
IFU - Issued For Use   4 
AB - As Built    NULL 
C1 - Proceed, No Exception Taken   2 
PEN - Pending    1 
PEN - Pending    2 
HLD - HOLD (Implementation Study ONLY) 1 

当我运行上面给出的SQL查询返回nothing.but只有

PEN - Pending  2 

在tblRevisionStatus表中存在的记录,为什么查询不返回其他records.am我失去了一些东西?

回答

0

实际的方法是使用主键这种类型的需求,但你可以试试下面的代码在所有表

使用主键传输数据到临时表

SELECT RevisionStatus,DocTypeID as 'DocType' 
from @temp where RevisionStatus not in(select distinct RevisionStatus From tblRevisionStatus) and DocTypeID not in (select distinct DocTypeID From tblRevisionStatus) 

我还是应激后选择结果

+0

ohh.i修正,但仍处于最后的结果相同result.no数据集 – chamara 2011-12-17 07:34:57

1

如果你想那是@Temp不在tblRevisionStatus行的列表,你可以很容易地做到这一点使用EXCEPT声明

select RevisionStatus, DocType 
from @Temp 

except 

select RevisionStatus, DocType 
from tblRevisionStatus 
0

我建议你不要使用IN和DISTICTS。这些在大多数情况下对性能不利。所以我的建议是这样的:

SELECT 
    tbl.RevisionStatus, 
    tbl.DocTypeID as 'DocType' 
FROM 
    @temp AS tbl 
WHERE NOT EXISTS 
    (
     SELECT 
      NULL 
     FROM 
      tblRevisionStatus 
     WHERE 
      tblRevisionStatus.RevisionStatus=tbl.RevisionStatus 
    ) 
    AND NOT EXISTS 
     (
      SELECT 
       NULL 
      FROM 
       tblRevisionStatus 
      WHERE 
       tblRevisionStatus.DocTypeID=tbl.DocTypeID 
     )