如何为特定ID选择所有列为空的值,ID不是唯一的

时间:2017-09-18 02:37:33

标签: sql sql-server sql-server-2012

我有一个包含以下格式的表,如果所有行的Value1为null,我想获取LotId。

现在如果我在做Select, Select * from Table1 where Value1 IS nul我,我要回来了。

但我希望不应该返回任何内容,因为有两行有一些价值。

我想到了自我加入,但这可以有n行。

Id          LotId       Value1      
-------------------------------------------------
1       LOt0065          NULL       
2       LOt0065          SomeValue
3       LOt0065          SomeValue 

1 个答案:

答案 0 :(得分:1)

我认为你需要在这里使用EXISTS子查询:

SELECT a.lotid
FROM table1 a
WHERE NOT EXISTS (
  SELECT 1
  FROM table1 b
  WHERE b.lotid = a.lotid
  AND b.value1 IS NOT NULL
);

如果我的语法正确,那么这将显示所有没有该lotid的NULL值的记录:

  • 它使用SELECT 1,因为子查询不需要显示任何值,只需要在外部查询上匹配。
  • 您将内部查询中的表与外部查询中的表进行比较,并匹配您正在查看的公共字段(在这种情况下为lotid)
  • 这也可以使用NOT IN子句来完成。

这能否为您提供所需的结果?