这是表结构(一对多关系)。每组(T01,T02,T03 ......)将有一个印章编号或无印章编号
我想基于DocType和StampNum字段过滤图1中给出的结果集中的行。我想显示除了那些具有docType 4和StampNum为Null的行之外的所有行。如果有一个带有docType 4的StampNum,则应该包含它。
结果看起来像是
我尝试了以下sql但它没有显示正确的结果。
SELECT * FROM EmpDocs a
WHERE NOT EXISTS ( select * from EmpDocs b
where a.ID = b.ID
and b.DocType = 4 and b.StampNum is not null)
答案 0 :(得分:0)
试试这个:
SELECT * FROM Employee a
WHERE NOT EXISTS ( select * from Employee b
where a.ID = b.ID
and b.DocType = 4
and b.StampNum is null)
答案 1 :(得分:0)
SELECT * FROM EmpDocs WHERE DocType <> 4 and StampNum <> ' '
StampNum列没有空值是否为空 值
答案 2 :(得分:0)
以下似乎正常运作:
SELECT *
FROM employee
WHERE ID NOT IN (
SELECT ID
FROM employee
WHERE DocType = 4
AND StampNum is NULL
)
这将选择所有行,但不包括ID位于DocType = 4 AND StampNum is null
行的行中的行。
请参阅SQL Fiddle进行演示。
编辑:实际上,您只需使用一个SQL语句即可解决此问题:
SELECT * FROM employee
WHERE DocType <> 4 OR (DocType = 4 AND StampNum is not null)
如果性能对您来说可能是一个问题,这可能会比其他解决方案更快,但这只是一个猜测。 另外,SQL Fiddle用于演示。