返回永远不会与任何行中某个列中的值相关联的用户的名称

时间:2015-10-06 16:26:19

标签: postgresql

假设我只想查看那些从未拥有与其对应的行的人的姓名,这些人在另一列中包含某个值。例如,在下表中......

name   | value
-------+-------
joe    | 0
joe    | 3
joe    | 2
joe    | 3
bill   | 0
bill   | 1
bill   | 2

...我想说些什么,"给我所有没有价值的用户' 1'在值列中。"在这种情况下,它只会返回" joe"。

在现实生活中的例子中,表格是巨大的,因此创建子查询并执行不在其中的名称(从表格中选择*,其中value = 1)不是时间有效。有没有更有效的方法来做这样的事情?

3 个答案:

答案 0 :(得分:1)

select name
from t
group by name
having not bool_or(value = 1)

http://www.postgresql.org/docs/current/static/functions-aggregate.html

答案 1 :(得分:0)

name分组,只拍摄value = 1

零次的内容
select name
from your_table
group by name
having sum(case when value = 1 then 1 else 0 end) = 0

答案 2 :(得分:0)

以下查询检索没有值1的用户

SELECT
distinct(name) from test
where name not in (select name from test where value=1)

以下查询检索所有不包含值1的行

SELECT
* from test
where name not in (select name from test where value=1)