Sql server 选择表2中没有记录或记录与表2中的条件不匹配的人员

Sql server 选择表2中没有记录或记录与表2中的条件不匹配的人员,sql-server,select,stored-procedures,Sql Server,Select,Stored Procedures,这与我正在处理的SQL Server存储过程有关 要解决的问题:当表2中不存在具有匹配ID的记录或不满足预期条件时,请从表1中选择一条记录 这个例子就是我在更改表名时尝试做的事情 两张桌子:人,东西 选择Person.Name 条件: 如果没有资料记录 如果在'7/1/18'和'6/30/19'之间没有任何内容,则状态不是'Draft' 数据示例: TABLE Person Person.PersonID, Person.Name 1, Frank 2, Tom 3, Barb TABLE

这与我正在处理的SQL Server存储过程有关

要解决的问题:当表2中不存在具有匹配ID的记录或不满足预期条件时,请从表1中选择一条记录

这个例子就是我在更改表名时尝试做的事情

两张桌子:人,东西

选择Person.Name

条件:

如果没有资料记录 如果在'7/1/18'和'6/30/19'之间没有任何内容,则状态不是'Draft' 数据示例:

TABLE Person

Person.PersonID, Person.Name

1, Frank
2, Tom
3, Barb

TABLE Stuff

Stuff.StuffID, Stuff.PersonID, Stuff.CreatedDate, Stuff.Status

1, 1, '7/30/18', 'Draft'
2, 2, '8/14/18', 'Submitted'
预期的查询结果

1. Frank
2. Barb
我不知道如何正确处理上述情况以显示正确的结果。我试图找到一个符合我需要的答案,但似乎没有一个完全符合我的要求

~~~使用工作解决方案更新~~~

在布赖恩和埃里克的帮助下,我找到了我做错的地方。我的条件把我弄糊涂了,以为我需要多套条件

SELECT DISTINCT Person.Name
FROM Person
WHERE NOT EXISTS
(
    SELECT 1 FROM Stuff
    WHERE
    Person.PersonID = Stuff.PersonID
    AND Stuff.CreatedDate >= '2018-07-01'
    AND Stuff.CreatedDate <= '2019-06-30'
    AND Stuff.Status <> 'Draft'
)

基本上,这使得任何不符合预期标准的东西都会被退回,这正是我想要的,但让我自己困惑,以为我需要更多。

我认为这会得到你想要的,而不是你的条件

SELECT
  p.Name
FROM
  Person AS p
WHERE
  NOT EXISTS 
(
  SELECT 1
  FROM Stuff AS s
  WHERE
    s.PersonId = p.PersonId
    AND s.CreatedDate >= '2018-07-01'
    AND s.CreatedDate <= '2019-06-30'
    AND s.Status <> 'Draft'
);

编辑:根据对下面问题和评论的编辑,我将答案精简为操作代码

我认为这就是你想要的,而不是你的条件

SELECT
  p.Name
FROM
  Person AS p
WHERE
  NOT EXISTS 
(
  SELECT 1
  FROM Stuff AS s
  WHERE
    s.PersonId = p.PersonId
    AND s.CreatedDate >= '2018-07-01'
    AND s.CreatedDate <= '2019-06-30'
    AND s.Status <> 'Draft'
);

编辑:根据对下面问题和评论的编辑,我将答案精简为操作代码

反过来想一想:写一个查询,提供您不想要的PersonID值,然后将其用作NOT in子句的子查询。@布赖恩,谢谢,我会试试看。@布赖恩,您关于从我不想看到的内容开始,然后将其用于NOT in子句的评论帮助我找到了一个可行的解决方案。我没有使用NOT IN,但我确实根据我不想看到的结果编写了NOT EXISTS select语句。我肯定是想错了。再次感谢!不客气。这就是这个网站的全部内容。坦白地说,我认为not exists方法在这种情况下更好。反过来考虑:编写一个查询,为您提供您不想要的PersonID值,然后将其用作not in子句的子查询。@Brian谢谢,我会试试看。@Brian您关于从我不想看到的内容开始,然后将其用于NOT IN子句的评论帮助我找到了一个有效的解决方案。我没有使用NOT IN,但我确实根据我不想看到的结果编写了NOT EXISTS select语句。我肯定是想错了。再次感谢!不客气。这就是这个网站的全部内容。坦白地说,我认为不存在的方法在这种情况下更好。谢谢你,我会研究这个问题,如果我能让它工作的话,我会把它标记为答案。埃里克,不存在肯定是答案。如果你用“不存在”更新你的答案,我会将其标记为已接受答案。你帮了我很大的忙,让我意识到我做错了什么,你应该为我的成功而感到自豪。我已经用有效的解决方案更新了这个问题。你提到裁员使我更接近于评估我真正需要的条件。再次感谢@San,我根据你的编辑和评论编辑了答案。很高兴它有帮助!谢谢你,我会调查这件事,如果我能让它工作的话,我会把答案记下来。埃里克,不存在绝对是答案。如果你用“不存在”更新你的答案,我会将其标记为已接受答案。你帮了我很大的忙,让我意识到我做错了什么,你应该为我的成功而感到自豪。我已经用有效的解决方案更新了这个问题。你提到裁员使我更接近于评估我真正需要的条件。再次感谢@San,我根据你的编辑和评论编辑了答案。很高兴它有帮助!