Sql 通过每个病例的多个记录筛选不存在的数据
因此,我对SQL比较陌生。我遇到了一些让我完全困惑的事情 我有一张表[Tab1],大致如下:Sql 通过每个病例的多个记录筛选不存在的数据,sql,sql-server,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
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
Pno | Status
------------------------
1 | AC
2 | CA
3 | AC
4 | AC
然后我有另一张表[Tab2]如下:
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
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中没有重复记录。我用了另外两种方法,包括这个方法(),但它不起作用,因为它返回了误报。这是我的第二次尝试,我从研究中得到了一些东西,并修改了我所拥有的
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 1和3为Ac状态,并且在OP下面的注释中拥有类型1文件,因此所需的输出为状态='Ac',没有文件类型=类型1。虽然这与问题中列出的期望输出不匹配,但这是一个可以实现该结果的查询:
Select Pno
From Tab2
Where Status = 'AC'
And Pno not in (Select IDNo
From Tab1
Where FileType= 'type1')
查看给定的Tab1和Tab2,输出应该是:4或者添加一个表,显示正确的输出应该是什么样子。请在底部添加。您使用的是哪种DBMS?博士后?神谕DB2?Firebird?数据库在RBDMS上RBDMS是缩写。您使用的数据库产品的名称是什么?因为我需要的不是Status='AC',而是Status='AC',并且没有Type1表单。在我的问题中,我会尽量使这一点更清楚。@EF87,在您的输出中,您有1和3。在Tab1中,您有记录1,Type1和3,Type1。从你上面的评论来看,我认为1和3应该被排除在外,4应该被包括在内。请澄清并更新您的问题。抱歉,您是对的。这就是为什么我应该更小心地在睡眠不足的时候发布东西。问题已更新。而且,我和一个和我一起工作的人找到了答案。我很快就会把它寄出去。