Sql 尝试在具有其他值的查询中返回空值

Sql 尝试在具有其他值的查询中返回空值,sql,sql-server,Sql,Sql Server,所以我在一个表中有以下数据 ID Name fID mID 1 Bob 135 100 2 James Null 100 3 Graham Null 100 4 Gemma 142 100 我想做的是返回Bob、James、Graham,因为它们都在100的中间,但fID是135或NULL

所以我在一个表中有以下数据

ID        Name        fID        mID
1         Bob         135        100
2         James       Null       100
3         Graham      Null       100
4         Gemma       142        100
我想做的是返回Bob、James、Graham,因为它们都在100的中间,但fID是135或NULL。这不包括Gemma,因为当她在100岁以下时,她的fID为142,而不是135或空值

到目前为止,我已经尝试过这样做:

SELECT ID, Name
FROM table1
WHERE mID=100 AND fID IN (SELECT fID FROM table1 WHERE fID=135 AND fID IS NULL)

但这不会带来任何回报。任何有帮助的建议。

在子选择中,您应该使用或而不是和

SELECT ID, Name FROM table1
WHERE mID=100 AND fID IN (SELECT fID FROM table1 WHERE fID=135 OR fID IS NULL)
是错误的,这里是正确的:

select id, name from table1 where mid = 100 and id in 
(SELECT ID FROM table1 WHERE fID=135 OR fID IS NULL)

那不行。如果fID为空,则fID在任何情况下都不会为真。以下是正确的方法:从表1中选择id、名称,其中mid=100,从表1中选择id,其中fID=135或fID为空,这将起作用。在我看来,这将是不必要的复杂,但它仍然是有效的。你可以编辑你的答案,如果你这样做了,我很乐意收回我的反对票。根据op没有告诉我的SQL方言,有更好的方法,Oracle:NVL,mssql为空…op做了:它是Microsoft SQL Server。你可以从标签上看出来。我想你想到的是ISNULLfID,135=135,这同样有效,但比安德烈·赫苏的答案更复杂。
SELECT ID, Name
FROM table1
WHERE mID=100 AND (fID = 135 OR fID is NULL)