SQL需要帮助的条款

时间:2017-02-21 19:02:03

标签: sql oracle

    A   B   C
1   bob 55  0
2   bob 55  1

我需要帮助我的where子句。上面的例子显示Bob有两条记录。我只想显示记录,如果所有Bob的记录在C列中的值为1.如果Bob的一个记录的值为0,那么它应该不为Bob返回任何内容。目前我只能让它返回一个值为1的记录。

现有查询

select a, b, c
from table
where b = 55 and c = 1

4 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用not exists

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.c <> 1
                 );

答案 1 :(得分:1)

我建议稍微修改一下SQL(包括Gordon规定的WHERE子句):

select t.a, t.b, t.c
from table t
where t.b = 55 and t.c = 1 and not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.b = t.b and t2.c = 0
                 );

Massimino的解决方案也有效,假设列c的值只有1或2。

答案 2 :(得分:0)

尝试使用NOT EXISTS,如下所示

  select a, b, c
  from table t
  where t.b = 55 and not exists (select 1 from table t2 
  where t2.b=t.b and t2.c=0)

答案 3 :(得分:0)

您可以创建一个子查询,查找任何等于一的记录。如果发生这种情况,则不会包含它们。

    select a, b, c
    from table as t
    where not exists (
       select * 
       from table as t1 
       where t.a = t1.a and IsNull(t1.c, -1) <> 1
    )

这样,列c的各种值可能会出现问题,即使你得到一些空值,它们也会有记录(以防万一你不熟悉你的数据。)。括号内的子查询可以自行运行,以测试或查看是否需要其他标准。

您可以将此表连接到自身并完成类似的操作,但我认为此代码示例显示了intent。