所以我对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文件
答案 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