筛选每个案例的多个记录中不存在的数据

时间:2017-05-10 20:10:34

标签: sql sql-server

所以我对SQL比较陌生。我碰到了一些东西,虽然让我完全难过。

我有一张表[Tab1],大概是这样的:

IDNo  | FileType 
------------------------  
   1  | type1
   1  | type2
   1  | type3
   1  | type4
   2  | type2
   2  | type3
   2  | type4
   3  | type1
   3  | type3
   3  | type4
   4  | type2
   4  | type3

然后我有另一张表[Tab2]:

  Pno | Status
------------------------  
   1  | AC
   2  | CA
   3  | AC
   4  | AC

我需要屏幕Tab2,只显示AC状态记录,同时检查Tab1以查看每个Pno缺少哪些文件。这是我得到的最接近的文件。

SELECT Pno from Tab2 where Pno NOT IN (

SELECT DISTINCT t1.Pno FROM (SELECT IDNo, Filetype FROM Tab1 where Filetype LIKE 'Type1') As t1 ) AND Status = 'AC'

但是,这并不能确保在IDNo下的Tab1中没有重复记录。我已经走了另外两种方式,包括这种方法(Link),但它没有工作,因为它返回误报。这是我的第二次尝试,我从研究中得到了什么并修改了我所拥有的东西。

SELECT Pno, Status 
from Tab2 
where Pno NOT IN (
SELECT DISTINCT t1.IDNo 
FROM (
    SELECT IDNo, FileType 
    FROM Tab1 
    where FileType LIKE 'Type 1') 
As t1 ) 
AND Status <> 'CA'
Order by Tab2.Pno

这一次,我仍然有误报。

有人可以为此提供帮助吗?

所以输出应该是:

  Pno 
------- 
   4

由于只有PNo 1和3属于Ac状态且拥有Type1文件

1 个答案:

答案 0 :(得分:0)

在下面的OP评论中,所需的输出是Status =&#39; AC&#39;没有FileType = Type1。虽然这与问题中列出的所需输出不匹配,但这是一个可以实现该结果的查询:

Select Pno
From Tab2
Where Status = 'AC'
And Pno not in (Select IDNo
                From Tab1
                Where FileType= 'type1')

查看给定的Tab1和Tab2,输出应为:4