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
答案 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。