假设我只想查看那些从未拥有与其对应的行的人的姓名,这些人在另一列中包含某个值。例如,在下表中......
name | value
-------+-------
joe | 0
joe | 3
joe | 2
joe | 3
bill | 0
bill | 1
bill | 2
...我想说些什么,"给我所有没有价值的用户' 1'在值列中。"在这种情况下,它只会返回" joe"。
在现实生活中的例子中,表格是巨大的,因此创建子查询并执行不在其中的名称(从表格中选择*,其中value = 1)不是时间有效。有没有更有效的方法来做这样的事情?
答案 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)