用于查找匹配记录的SQL查询,但不包括与第二个条件匹配的记录

时间:2013-09-13 10:12:00

标签: sql

我有一个SQL数据库,我想找到符合一个条件的所有记录,但是从该组结果中排除与第二个条件匹配的记录。更具体地说 -

带有Fields ='DocID','Description','SignID'

的表'Documents'

表'签名',其中Fields ='SignID','SignatoryName'

我想查找特定签名人签署的所有文件,例如

SELECT d.DocID, s.SignID
FROM Documents AS d
INNER JOIN Signatures AS s ON d.SignID = s.SignID
WHERE s.SignatoryName = 'Search Name Here';

但是,许多文件都是由不止一个人签署的(即文件>签名是一对多)。除了上述查询中的特定签名者之外,我想排除其他人签署的文件。换句话说,我想找到所有那些仅由特定签字人签署的文件。

但我不确定如何修改我的查询来实现这个目标。

2 个答案:

答案 0 :(得分:1)

尝试使用以下查询:

(SELECT d.DocID, s.SignID
FROM Documents AS d)
temp1
INNER JOIN Signatures AS s ON d.SignID = s.SignID
WHERE s.SignatoryName = 'Search Name Here' and d.DOCID not in ( select DocID from temp1)

答案 1 :(得分:0)

假设SignatoryName不为null,您可以尝试:

SELECT d.DocID, s.SignID
FROM Documents AS d
WHERE 'Search Name Here' = (
  SELECT CASE WHEN MAX(SignatoryName) = MIN(SignatoryName) 
              THEN SignatoryName ELSE NULL END
  FROM Signatures AS s ON s.SignID = d.SignId
)