这与我正在处理的SQL Server存储过程有关。
要解决的问题:当表2中不存在具有匹配ID的记录或不满足预期条件时,请从表1中选择一条记录。
此示例是我试图更改表名的方法。
两个表:人,资料
选择人名。
条件:
数据示例:
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
我不知道如何正确处理上述条件以显示正确的结果。我试图找到一个与我需要的答案相符的答案,但似乎没有一个完全合适的答案。
~~~更新工作解决方案~~~
在Brian和Eric的帮助下,我能够发现自己做错了什么。我的条件使我困惑,以为我需要多套条件。
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'
)
基本上做到了,因此返回了不符合预期标准的任何东西,这正是我想要的,但让自己困惑,以为我需要更多。
答案 0 :(得分:2)
我认为这可以满足您的要求,NOT EXISTS
可以满足您的条件。
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'
);
编辑:我根据下面对问题和评论的修改,将答案缩小为适用于OP的代码。